У меня есть в моих маршрутах:
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="✓" />
<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
А теперь работает как надо. Обновления, даже пользовательские, являются «положенными» функциями.