Я пытаюсь добавить ссылку в представление Rails, чтобы установить для логического поля значение true при его нажатии.В контроллере (present_controller.rb) у меня есть следующий код:
def taken_toggle
@matching = Present.find(params[:id])
@matching.taken = true
@matching.save
end
и в связанном представлении у меня есть следующий код:
<%= link_to "I want to buy this present", :url => {:action => "taken_toggle", :id => @present.id} %>
Однако, когда я нажимаю кнопкуНичего не произошло.Если я вернусь к основному списку, логическое поле не было обновлено.В журнале я получаю следующее:
Started GET "/presents/2/edit?url[action]=taken_toggle&url[id]=2" for 152.78.101.154 at Sun Jan 30 04:56:34 -0800 2011
Processing by PresentsController#edit as HTML
Parameters: {"url"=>{"action"=>"taken_toggle", "id"=>"2"}, "id"=>"2"}
Rendered presents/_form.html.erb (6.0ms)
Rendered presents/edit.html.erb within layouts/application (10.0ms)
Completed 200 OK in 13ms (Views: 10.7ms | ActiveRecord: 0.9ms)
Я уверен, что упускаю что-то действительно простое - кто-нибудь знает, что это такое?
Обновление: Я добавил маршрут, и rake routes
теперь дает следующую строку (среди всех обычных маршрутов):
taken_toggle_present PUT /presents/:id/taken_toggle(.:format) {:controller=>"presents", :action=>"taken_toggle"}
На что я должен изменить ссылку, чтобы она работала?На данный момент ссылка по-прежнему:
<%= link_to "I want to buy this present", :url => {:action => "taken_toggle", :id => @present.id} %>
Но мне это кажется правильным, так как он идет к правильному действию и передает идентификационный номер.Любые идеи?
Обновление: Я попробовал последние ответы, но оба они приводят к следующей ошибке журнала:
Started GET "/presents/2/taken_toggle" for 86.150.141.2 at Fri Feb 04 01:37:23 -0800 2011
ActionController::RoutingError (No route matches "/presents/2/taken_toggle"):
Это кажется немного странным, учитываявыход rake routes
выше.Есть идеи?