2 Stimmen

Rails 3.0.10, Kundentrouten, post und form_for-Tag

Ich habe das in meinen Routen:

resources :events do
  collection do
    post 'moderate'
  end

Rake-Routen zeigt mir:

moderate_events POST /events/moderate(.:format) {:controller=>"events", :action=>"moderate"}

Ich habe einen "Administration" Controller, der einfach Ereignisse auflistet, die moderiert werden müssen:

@modevents = Event.where('moderated <> 1')

Bis jetzt alles gut, alle Ereignisse, die noch nicht moderiert wurden, können im View angezeigt werden:

<%- @modevents.each do |me| -%>
  Zeige hier Sachen an
<%- end -%>

Ich möchte ein Formular in der Schleife platzieren, das den moderierten Wert aktualisiert, aber ich kann einfach nicht herausfinden, was ich in das form_for einfügen soll - Ich habe es versucht:

<%= form_for me, :url => moderate_events_path do |f| %>
  <%= f.submit %>
<% end %>

Der zurückgegebene HTML-Code ist:

Wenn ich auf die Schaltfläche "Absenden" klicke, erhalte ich den folgenden Fehler:

Konnte Ereignis mit ID=moderate nicht finden

Die Lösung ist sehr einfach, ändern Sie in den Routen "post" zu "put":

resources :events do
  collection do
    put 'moderate'
  end

Und jetzt funktioniert es wie es sollte. Aktualisierungen, auch benutzerdefinierte, sind "put"-Funktionen.

0voto

Jez Caudle Punkte 183

Die Antwort befindet sich tatsächlich im obigen Text unten, aber vielleicht nicht offensichtlich. Wenn Sie Dinge aktualisieren, sollten Sie "put" und nicht "post" verwenden.

0voto

DGM Punkte 26106

Sie können auch POST verwenden, indem Sie folgendes angeben:

<%= form_for me, :url => moderate_events_path, :method => :post do |f| %>

aber wie bereits gesagt, muss der Unterschied zwischen Aktualisierung und Erstellung gemacht werden. Der Standard in Rails ist update==put und create==post.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X