2014-12-06 2 views
0

Я новичок в рельсы и пытаюсь получить следующую битый RSpec передать, что позволит вызову пути к флагу курса как скрытые:Как вызвать предикатный метод в контроллере рельсов 4?

describe 'PATCH hide_course' do 
    before :each do 
     @course = create(:course) 
    end 

    it 'marks the course as hidden' do 
     patch :hide_course, id: @course 
     expect(@course.reload.hidden?).to be_true 
    end 

    it 'redirects to courses#index' do 
     patch :hide_course, id: @course 
     expect(response).to redirect_to course_url 
    end 
end 

Затем я следующий маршрут без проблем:

resources :courses 
put '/courses/:id/hide_course', to: 'courses#hide_course' 

Моя проблема заключается в установке действия контроллера. Вот немного, я написал в своем CoursesController:

def hide_course 
    @course = Course.find(params[:id]) 
    @course.hide 
end 

private 

def course_params 
    params.require(:course).permit(:name,:description,:department,:hidden, 
     :lecture_attributes => [:name,:description,:level]) 
end 

Моя модель будет выглядеть следующим образом:

def hide 
    update!(:hidden => true) 
end 

Что это лучший способ для меня, чтобы настроить этот метод в рельсах 4? Я продолжаю получать ошибки о скрытом атрибуте, который не существует, даже если он находится в моей схеме. Благодаря!

PS- Цепочка вызовов я в первый спецификации заключается в следующем:

1) CoursesController PATCH hide_course marks the course as hidden 
    Failure/Error: patch :hide_course, id: @course 
    ActiveRecord::UnknownAttributeError: 
     unknown attribute: hidden 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/attribute_assignment.rb:59:in `rescue in _assign_attribute' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/attribute_assignment.rb:54:in `_assign_attribute' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/attribute_assignment.rb:41:in `block in assign_attributes' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/attribute_assignment.rb:35:in `each' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/attribute_assignment.rb:35:in `assign_attributes' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/persistence.rb:262:in `block in update!' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/transactions.rb:345:in `block in with_transaction_returning_status' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/connection_adapters/abstract/transaction.rb:188:in `within_new_transaction' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/transactions.rb:218:in `transaction' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/transactions.rb:342:in `with_transaction_returning_status' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/persistence.rb:261:in `update!' 
    # ./app/models/course.rb:13:in `hide' 
    # ./app/controllers/courses_controller.rb:60:in `hide_course' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/action_controller/metal/implicit_render.rb:4:in `send_action' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/abstract_controller/base.rb:198:in `process_action' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/action_controller/metal/rendering.rb:10:in `process_action' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/abstract_controller/callbacks.rb:20:in `block in process_action' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:114:in `call' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:114:in `call' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:231:in `block in halting' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:231:in `call' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:231:in `block in halting' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:166:in `call' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:166:in `block in halting' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:166:in `call' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:166:in `block in halting' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:231:in `call' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:231:in `block in halting' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:166:in `call' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:166:in `block in halting' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:87:in `call' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/callbacks.rb:87:in `run_callbacks' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/abstract_controller/callbacks.rb:19:in `process_action' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/action_controller/metal/rescue.rb:29:in `process_action' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/action_controller/metal/instrumentation.rb:31:in `block in process_action' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/notifications.rb:164:in `block in instrument' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.0.beta2/lib/active_support/notifications.rb:164:in `instrument' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/action_controller/metal/instrumentation.rb:30:in `process_action' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/action_controller/metal/params_wrapper.rb:250:in `process_action' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.0.beta2/lib/active_record/railties/controller_runtime.rb:18:in `process_action' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/abstract_controller/base.rb:137:in `process' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionview-4.2.0.beta2/lib/action_view/rendering.rb:30:in `process' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/action_controller/test_case.rb:628:in `process' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/action_controller/test_case.rb:64:in `process' 
    # /Users/sjensen/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0.beta2/lib/action_controller/test_case.rb:516:in `patch' 
    # ./spec/controllers/courses_controller_spec.rb:171:in `block (3 levels) in <top (required)>' 
+0

Почему '?' Отмечают в вашем атрибуте 'hidden?'. Я вижу, что ваше имя атрибута «скрыто». –

+0

Хороший вопрос, я собирался с примера в книге: Everyday Rails Testing с Rspec. Кажется, я даю мне неизвестную ошибку атрибута, даже когда я удаляю? – Coherent

+0

'?' В атрибутах flag/boolean является условным обозначением атрибута, является флагом и дает некоторый синтаксический сахар для 'if' 'и' if' – rafb3

ответ

0

Убедитесь, что тест дб настроен правильно. Попробуйте запустить rake db:test:prepare

+0

Я запускаю рельсы 4.2, которые управляют тестовой базой данных автоматически, я считаю (по крайней мере, это предупреждение, которое я получаю, когда я запускаю эту команду). Я использую rspec для кодирования обычных спецификаций модели без каких-либо проблем в этом проекте, поэтому я считаю, что тест db в порядке. Благодаря! – Coherent

Смежные вопросы