我有一个带有挂载引擎的项目。到目前为止,除了“更新”功能外,一切都按预期工作。引擎控制器是通过脚手架创建的,一切看起来都像我期望的那样。索引,显示,编辑,删除所有按预期工作,过滤操作之前和之后关联。
但是,Update会引发以下异常:
屏幕:
NoMethodError in MeetmeManagerPlugin::ConferenceRoomsController#update
private method `update' called for #<MeetmeManagerPlugin::ConferenceRoom:0x007fe8ac24a080>
控制台:
NoMethodError (private method `update' called for #<MeetmeManagerPlugin::ConferenceRoom:0x007fe8ac24a080>):
activemodel (3.2.13) lib/active_model/attribute_methods.rb:404:in `method_missing'
activerecord (3.2.13) lib/active_record/attribute_methods.rb:149:in `method_missing'
/Volumes/MacTheCrypt 1/Project Work/jkl5_projects/meetme_manager_plugin/app/controllers/meetme_manager_plugin/conference_rooms_controller.rb:57:in `update'
actionpack (3.2.13) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (3.2.13) lib/abstract_controller/base.rb:167:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (3.2.13) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
控制器中的实际代码如下:
def update
if @conference_room.update(conference_room_params)
redirect_to @conference_room, notice: 'Conference room was successfully updated.'
else
render action: 'edit'
end
end
令人窒息的是“@ conference_room.update(conference_room_params)”。
相当多的网络搜索尚未对此有所了解,所以我认为这里有人可能会有一个建议。在此先感谢,如果您需要我的任何其他信息,请告诉我。
答案 0 :(得分:5)
解决此问题的方法是使用“update_attributes”而不是“update”:
def update
if @conference_room.update_attributes(conference_room_params)
redirect_to @conference_room, notice: 'Conference room was successfully updated.'
else
render action: 'edit'
end
end # def update
这样工作得很好。因此,虽然我仍然不确定为什么另一种方法是borken,但考虑到它的脚手架代码,这确实允许程序执行完成而没有错误。