Rails 3, пользовательские действия и методы HTML-запроса - PullRequest
2 голосов
/ 06 октября 2010

Я не очень понимаю за и против использования "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, и я чувствую, что это должен быть "пут" или "пост". Или это вообще должна быть ссылка? Это должна быть форма со скрытыми полями?

1 Ответ

2 голосов
/ 06 октября 2010

Метод "link_to" обычно генерирует тег привязки, т. Е. "", то есть обычный запрос GET

, чтобы выполнить запрос POST с использованием link_to. Вам необходимо выполнить следующее

= link_to "Complete", complete_task_path(:id => @task.id), :method => :post

Помните, что если в браузере отключен javascript, приведенный выше оператор будет использовать запрос GET вместо POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...