2011-01-05 11 views
5

RESTfulコントローラを使用して同じタイプの複数のオブジェクトを削除したいと思います。RESTfulコントローラで複数のオブジェクトをRailsで削除しますか?

私が考えることができる最も簡単なことは、破棄するアクションが、オブジェクトのIDのカンマ区切りのリストが破棄されることを期待することです。

これを行うもっとエレガントな方法はありますか?

答えて

-1

はここでRESTfulな要求がどのように見えるかです。

POST /posts/delete_multiple HTTP/1.1 
Host: www.example.com 

post_ids[]=33&post_ids[]=47&post_ids[]=88 

しばらくGETPUT、およびDELETEはRESTの文脈の中で非常に特定の意味を持っていることに注意してくださいは、POSTはより曖昧で、基本的に何らかのアクションを取ることを意味します。実行するアクションはURLで指定され、アクションに固有の追加データは要求のエンティティ(本体)に渡されます。 GET,PUT、およびDELETEが意図した意味を持たない場合にのみ、この方法でPOSTを使用してください。

POSTは一般に「作成」と解釈されますが、これは実際には正しくありません。新しく作成されたリソースのURLを知りたくない場合には、通常はPOSTを使用して新しいリソースを作成します。しかし、クライアントが新しく作成されたリソースのURLを判断すると、正しい動詞はPUTになります。

+0

の例では、意図したRPCスタイルのアーキテクチャです操作はHTTPメソッドではなくURIで定義されます。また、POSTはHTTP標準の[セクション9.5](http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5)で明確に定義されています。標準では、POSTメソッドをRESTfulにしないデータ処理プロセスにデータを送信するためにPOSTを使用できることを示していますが、 RESTfulなアプローチは、他のリソースのコレクションを表す新しいリソースを定義し、そのコレクションを削除することです。 –

+0

OK、同じエンティティボディで 'POST/posts/batch_deletes'を実行します。サブリソース( 'Post :: BatchDelete'リソース)が作成されますが、すぐに背後で実行され、瞬時に破棄されます。サブリソースを実行すると、そのサブリソースにリストされているすべての投稿も破棄されます。 – yfeldblum

+1

しかし、複数のリソースを削除するために2つの要求を必要とすることは安らかではありません(具体的には*要件*は*この方法でなければなりません*安らかではありません)。 1つではなく2つのリクエスト/レスポンスサイクルが必要なため、遅いです。 – yfeldblum

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 %> 
関連する問題