Я не очень понимаю за и против использования "post" против "get" против "put" запросов, пользовательских действий контроллера и того, использовать ли ссылки или формы / кнопки.
Итак, допустим, у меня есть простой список дел с задачами и контроллером задач, и я хочу "завершить" действие, в котором я нахожу конкретную задачу в БД и обновляю ее атрибут состояния с "неполного" до " полный. "
def complete
@task = Task.find(params[:id])
if @task.update_attributes(:status => "complete")
redirect_to tasks_url, :notice => "Completed!"
else
redirect_to tasks_url, :error => "Whoops."
end
end
Каков наилучший практический способ определения этого маршрута, какой метод HTML-запроса мне следует использовать (post? Put? Get?) И нужно ли использовать простую ссылку или форму? (и обратите внимание: предположим, что моя модель безопасности пользователя полностью разработана с помощью devise и подходит перед фильтрами и т. д.)
И, самое главное, как бы я сформулировал все это в файле Rails 3 rout.rb?
Обратите внимание, приведенный ниже код на самом деле не работал для меня:
#routes.rb
resources :tasks do
members do
post 'complete'
end
end
поэтому в настоящее время я использую это вместо:
#routes.rb
match 'tasks/:id/complete', 'tasks#complete', :as => "complete_task"
#view
= link_to "Complete", complete_task_path(:id => @task.id)
Но это вызывает запрос get, и я чувствую, что это должен быть "пут" или "пост". Или это вообще должна быть ссылка? Это должна быть форма со скрытыми полями?