1

我有一个带有安装引擎的项目。到目前为止,除了“更新”功能之外,一切都按我的预期工作。引擎控制器是通过脚手架创建的,一切看起来都符合我的预期。索引、显示、编辑、删除所有操作都按预期工作,相关的前后过滤操作也是如此。

但是,更新会引发以下异常:

屏幕:

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)”。

相当多的网络搜索还没有对此有所了解,所以我想这里有人可能会有建议。提前致谢,如果您需要任何进一步的信息,请告诉我。

4

1 回答 1

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

这种方式工作得很好。因此,虽然我仍然不确定为什么另一种方法会失败,但考虑到它是脚手架代码,这确实允许程序执行完成而不会出错。

于 2013-07-16T12:47:44.107 回答