我想使用RESTful控制器删除多个相同类型的对象。
我能想到的最简单的事情就是让destroy动作期望以逗号分隔的对象ID列表来销毁。
有更优雅的方法吗?
答案 0 :(得分:3)
我认为采用一系列ID会更优雅:
http://guides.rubyonrails.org/action_controller_overview.html#hash-and-array-parameters
答案 1 :(得分:2)
您可以使用嵌套表单..
请参阅http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes
我认为那是最优雅的版本......
<% form_for @person do |person_form| %>
<%= person_form.label :name %>
<%= person_form.text_field :name %>
<% person_form.fields_for :children do |child_form| %>
<%= child_form.label :name %>
<%= child_form.text_field :name %>
<% unless child_form.object.new_record? %>
<%= child_form.check_box '_delete' %>
<%= child_form.label '_delete', 'Remove' %>
<% end %>
<% end %>
<%= submit_tag %>
<% end %>
答案 2 :(得分:-1)
以下是RESTful请求的外观。
POST /posts/delete_multiple HTTP/1.1
Host: www.example.com
post_ids[]=33&post_ids[]=47&post_ids[]=88
请注意,虽然GET
,PUT
和DELETE
在REST上下文中具有非常具体的含义,但POST
更加模糊,实质上意味着采取某些行动。要采取的操作在URL中给出,并且特定于操作的其他数据在请求的实体(主体)中传递。仅当POST
,GET
和PUT
没有预期意义时,才会以这种方式使用DELETE
。
POST
通常被解释为“创建”,但这并不正确。当客户端不知道新创建的资源的URL应该是什么时,我们通常使用POST
来创建新资源。但是当客户端确实确定新创建的资源的URL时,正确的动词将是PUT
。