2013-06-13 2 views
0

я получил следующую ссылку, чтобы опубликовать проект: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 

Является ли это общепринятый способ делать такого рода вещи, где атрибут установленный в модели и не прошедший через хэш-параметр params? Требуется ли для моего контроллера действие PATCH здесь?

ответ

1

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

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

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

Смежные вопросы