2

私は私のルートにこれを持っています:

resources :events do
  collection do
    post 'moderate'
  end
end

レーキルートは私に教えてくれます:

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

モデレートが必要なイベントを単にリストする「管理」コントローラーがあります。

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

これまでのところ、モデレートされていないすべてのイベントをビューに表示できます。

<%- @modevents.each do |me| -%>
  Display Stuff here
<%- end -%>

モデレートされた値を更新するループにフォームを入れたいのですが、私の人生では、form_forに何を入れるべきかわかりません-私は試しました:

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

返される html は次のとおりです。

<form accept-charset="UTF-8" action="/events/moderate" class="edit_event" id="edit_event_1" method="post">
  <div style="margin:0;padding:0;display:inline">
  <input name="utf8" type="hidden" value="&#x2713;" />
  <input name="_method" type="hidden" value="put" />

「送信」ボタンをクリックすると、次のエラーが表示されます。

Couldn't find Event with ID=moderate

解決策は非常に簡単です。ルートで「post」を「put」に変更します。

resources :events do
  collection do
    put 'moderate'
  end
end

そして今、それは正常に機能します。更新は、カスタムのものでも「プット」機能です。

4

2 に答える 2

0

答えは実際には上のテキストの下部にありますが、おそらく明白ではありません。更新する場合は、投稿ではなく「置く」を使用する必要があります。

于 2011-11-29T13:55:24.410 に答える
0

次のように指定して POST を使用することもできます。

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

ただし、前に述べたように、更新と作成は区別する必要があります。Rails の標準は update==put と create==post です。

于 2011-11-29T14:00:18.307 に答える