Rails Erholsame Aktionen Index Put

Ich bin häufig auf die Situation gestoßen, dass ich viele Datensätze auf einmal aktualisieren möchte - wie es GMail tut, wenn viele Nachrichten "gelesen" oder "ungelesen" gesetzt werden.

Rails unterstützt dies mit der 'update'-Methode für eine ActiveRecord-Klasse - Comment.update (Schlüssel, Werte)

Beispiel -http: //snippets.dzone.com/posts/show/749

Dies ist eine großartige Funktion, die sich jedoch nur schwer auf eine erholsame Route abbilden lässt. In gewisser Hinsicht würde ich gerne eine: Aktion für eine Sammlung sehen. In Routen könnten wir so etwas wie @ hinzufüg

map.resources :comments, :collection => { :update_many => :put }

Und dann in der Form würden Sie dies tun ...

<% form_for @comments do |f| %>
  ...

Dies funktioniert nicht auf vielen Ebenen. Wenn Sie dies tun:: collection => {: update_many =>: put}, senden Rails einen Beitrag an die Indexaktion (CommentsController # index). Ich möchte, dass er zur Aktion 'update_many' wechselt. Stattdessen können Sie Folgendes ausführen: collection => {: update_many =>: post}. Damit wird zumindest die richtige Aktion in der Steuerung ausgeführt.

Und anstelle von <% form for @comments ... müssen Sie Folgendes tun:

<% form_for :comments, :url => { :controller => :comments, :action => :update_many } do |f| %>

Es wird auf diese Weise OK funktionieren

Noch nicht perfekt - fühlt sich ein wenig so an, als würden wir es nicht auf die 'Rails-Art' machen. Es scheint auch so, als ob: post und: delete auch auf einem Collection-Controller sinnvoll wären.

Ich poste hier, um zu sehen, ob ich beim Einrichten etwas verpasst habe. Irgendwelche anderen Gedanken darüber, wie man eine Sammlungsebene in Ruhe durchführt: post,: put,: delete?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage