나는 레일에 새로운 오전 숨김으로 플래그에 대한 경로를 과정을 호출 할 수있게 되었 할 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)>'
속성에'? '기호가 왜 숨겨져 있습니까? 귀하의 속성 이름이 '숨김'임을 알 수 있습니다. –
좋은 질문입니다. Rspec을 사용한 Everyday Rails 테스팅의 예제에서 벗어나려고했습니다. 그것은 내가 알 수없는 특성 오류를 제거하는 경우에도 줄 것? – Coherent
플래그/부울 속성의'?'는 속성이 플래그임을 나타내는 규칙이며,'if's 및'unless'에 대한 설탕을 제공합니다. – rafb3