link_to是自定义路由还是表单提供状态更改的最佳方式?

时间:2016-03-09 21:04:40

标签: ruby-on-rails

什么是' Rails方式'从视图中提供对以下方法的访问

def approve!
  self.update_attribute status, 'approved'
end

最好是创建指向自定义路线的链接

<%= link_to 'Approve', approve_object_path(@object) %>

#objects_controller.rb
def approve
  @object.approve!
end

或创建更新表单

<%= simple_form_for @object do |f| %>
  <%= f.input :status, input_html { value: 'approved' }, as: :hidden %>
  <%= f.submit %>
<% end %>

一方面,使用表单而不使用approve!方法似乎更能与宁静的路线保持一致。

另一方面,指向自定义路径的链接似乎为用户操纵提交的值提供了更少的机会,并且还需要更少的代码来实现。

这是首选方法吗?

2 个答案:

答案 0 :(得分:1)

我不知道是否有一个首选的最佳做法,本身......

只是我的意见,但我通常采用link_to方法,而像你的例子那样的“状态机”。像这样对简单操作的整个表单的需求是很多额外的代码,当调用一个动作来改变状态时,这是不必要的。

对此的反驳论点是它破坏了CRUD,并且需要非CRUD路由。约定配置冠军可能更喜欢整个新控制器来改变对象的状态。

TL; DR - 我执行link_to方法,并使用:remote => true使其异步,因此页面甚至不会重新加载(除非您需要将页面重定向到其他位置)。

答案 1 :(得分:1)

您可以使用这两种方案远程更改状态。 但我认为如果只需更改状态,请使用link_to。因为我们不需要在params这里有列出属性的表单功能。