RESTfulコントローラを使用して同じタイプの複数のオブジェクトを削除したいと思います。RESTfulコントローラで複数のオブジェクトをRailsで削除しますか?
私が考えることができる最も簡単なことは、破棄するアクションが、オブジェクトのIDのカンマ区切りのリストが破棄されることを期待することです。
これを行うもっとエレガントな方法はありますか?
RESTfulコントローラを使用して同じタイプの複数のオブジェクトを削除したいと思います。RESTfulコントローラで複数のオブジェクトをRailsで削除しますか?
私が考えることができる最も簡単なことは、破棄するアクションが、オブジェクトのIDのカンマ区切りのリストが破棄されることを期待することです。
これを行うもっとエレガントな方法はありますか?
私はIDの配列を取るために、よりエレガントなことだと思う:
http://guides.rubyonrails.org/action_controller_overview.html#hash-and-array-parameters
はここで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で指定され、アクションに固有の追加データは要求のエンティティ(本体)に渡されます。 GET
,PUT
、およびDELETE
が意図した意味を持たない場合にのみ、この方法でPOST
を使用してください。
POST
は一般に「作成」と解釈されますが、これは実際には正しくありません。新しく作成されたリソースのURLを知りたくない場合には、通常はPOST
を使用して新しいリソースを作成します。しかし、クライアントが新しく作成されたリソースのURLを判断すると、正しい動詞はPUT
になります。
あなたは
は、私が最もエレガントなバージョン厥と思う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 %>
の例では、意図したRPCスタイルのアーキテクチャです操作はHTTPメソッドではなくURIで定義されます。また、POSTはHTTP標準の[セクション9.5](http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5)で明確に定義されています。標準では、POSTメソッドをRESTfulにしないデータ処理プロセスにデータを送信するためにPOSTを使用できることを示していますが、 RESTfulなアプローチは、他のリソースのコレクションを表す新しいリソースを定義し、そのコレクションを削除することです。 –
OK、同じエンティティボディで 'POST/posts/batch_deletes'を実行します。サブリソース( 'Post :: BatchDelete'リソース)が作成されますが、すぐに背後で実行され、瞬時に破棄されます。サブリソースを実行すると、そのサブリソースにリストされているすべての投稿も破棄されます。 – yfeldblum
しかし、複数のリソースを削除するために2つの要求を必要とすることは安らかではありません(具体的には*要件*は*この方法でなければなりません*安らかではありません)。 1つではなく2つのリクエスト/レスポンスサイクルが必要なため、遅いです。 – yfeldblum