Пользовательский метод Rails 4 для обновления атрибута модели

У меня есть следующая ссылка для публикации проекта:

# PATCH to a custom route called publish_project_path
= link_to 'Publish', publish_project_path(project), method: :patch

# in controller
def publish
  @project.publish   
  redirect_to projects_url, notice: 'Project was successfully published.'
end

# in model
def publish
  self.published = true
  self.save!
end  

# in routes
resources :projects do
  member do
    patch 'publish'
  end
end

Является ли это общепринятым способом выполнения подобных действий, когда атрибут устанавливается в модели, а не передается через хеш параметров? Нужно ли моему действию контроллера ИСПРАВЛЯТЬ здесь?


person stephenmurdoch    schedule 13.06.2013    source источник


Ответы (1)


Для меня это так и должно быть. Это прекрасно успокаивает.

Прежде всего, вы откладываете реализацию того, как проект должен быть опубликован в модели. Во-вторых, вам не нужно передавать какие-либо переменные формы (например, params[:project][:published] # => true) из представления через контроллер в модель и обновлять их в действии #publish. Меньше причин для ошибок.

И что касается правильного метода: в Rails 3.x я бы использовал PUT, так что да, с Rails 4.x, возможно, лучше всего использовать PATCH.

person Christiaan Van den Poel    schedule 13.06.2013