Rails可安装引擎"更新"方法无法访问

时间:2013-07-15 16:05:16

标签: ruby-on-rails-3.2 rails-activerecord rails-engines

我有一个带有挂载引擎的项目。到目前为止,除了“更新”功能外,一切都按预期工作。引擎控制器是通过脚手架创建的,一切看起来都像我期望的那样。索引,显示,编辑,删除所有按预期工作,过滤操作之前和之后关联。

但是,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)”。

相当多的网络搜索尚未对此有所了解,所以我认为这里有人可能会有一个建议。在此先感谢,如果您需要我的任何其他信息,请告诉我。

1 个答案:

答案 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,但考虑到它的脚手架代码,这确实允许程序执行完成而没有错误。