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' 

내 문제는 컨트롤러 동작을 설정하는 것입니다.

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에서이 방법을 설정하는 최선의 방법은 무엇입니까 여기가 내 CoursesController에 쓴 비트는? 내 스키마에도 존재하지 않는 숨겨진 속성에 대한 오류가 계속 발생합니다. 감사!

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

속성에'? '기호가 왜 숨겨져 있습니까? 귀하의 속성 이름이 '숨김'임을 알 수 있습니다. –

+0

좋은 질문입니다. Rspec을 사용한 Everyday Rails 테스팅의 예제에서 벗어나려고했습니다. 그것은 내가 알 수없는 특성 오류를 제거하는 경우에도 줄 것? – Coherent

+0

플래그/부울 속성의'?'는 속성이 플래그임을 나타내는 규칙이며,'if's 및'unless'에 대한 설탕을 제공합니다. – rafb3

답변

0

테스트 DB를 올바르게 설정되어 있는지 확인하십시오 :

는 PS- 내가 처음 스펙 얻을 역 추적이입니다. 시도해보십시오 rake db:test:prepare

+0

필자는 테스트 데이터베이스를 자동으로 관리하는 레일 4.2를 실행 중입니다. (적어도 그 명령을 실행할 때 나는 경고입니다). 나는 rspec을 사용하여이 프로젝트에서 아무 문제없이 일반적인 모델 스펙을 코딩 했으므로 테스트 db가 괜찮다고 생각한다. 감사! – Coherent

관련 문제