【发布时间】:2009-11-20 17:22:37
【问题描述】:
我经常遇到想要一次更新多条记录的情况 - 就像 GMail 将许多消息设置为“已读”或“未读”一样。
Rails 通过 ActiveRecord 类的“更新”方法来鼓励这一点 - Comment.update(keys, values)
示例 - http://snippets.dzone.com/posts/show/7495
这是很棒的功能,但很难映射到宁静的路线。从某种意义上说,我希望看到对集合执行 :put 操作。在路由中,我们可能会添加类似
map.resources :comments, :collection => { :update_many => :put }
然后在表单中,你会这样做......
<% form_for @comments do |f| %>
...
这在很多层面上都不起作用。如果你这样做: :collection => { :update_many => :put },rails 将提交一个帖子到 index 操作(CommentsController#index),我希望它去 'update_many' 操作。相反,您可以执行 :collection => { :update_many => :post }。这至少会在控制器中执行正确的操作。
并且,您必须执行以下操作,而不是
<% form_for :comments, :url => { :controller => :comments, :action => :update_many } do |f| %>
这样就可以了
仍然不完美 - 感觉有点像我们没有按照“Rails 方式”进行操作。 :post 和 :delete 似乎在集合控制器上也有意义。
我在这里发帖,看看我在设置时是否遗漏了什么。关于如何从容地进行收集级别 :post、:put、:delete 的任何其他想法?
【问题讨论】:
-
我意识到我的回答只是为激发您的问题的问题提供了另一种解决方案。我已经对其进行了编辑以反映这一点。
标签: ruby-on-rails forms rest