什么是' 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!
方法似乎更能与宁静的路线保持一致。
另一方面,指向自定义路径的链接似乎为用户操纵提交的值提供了更少的机会,并且还需要更少的代码来实现。
这是首选方法吗?
答案 0 :(得分:1)
我不知道是否有一个首选的最佳做法,本身......
只是我的意见,但我通常采用link_to
方法,而像你的例子那样的“状态机”。像这样对简单操作的整个表单的需求是很多额外的代码,当调用一个动作来改变状态时,这是不必要的。
对此的反驳论点是它破坏了CRUD,并且需要非CRUD路由。约定配置冠军可能更喜欢整个新控制器来改变对象的状态。
TL; DR - 我执行link_to
方法,并使用:remote => true
使其异步,因此页面甚至不会重新加载(除非您需要将页面重定向到其他位置)。
答案 1 :(得分:1)
您可以使用这两种方案远程更改状态。
但我认为如果只需更改状态,请使用link_to
。因为我们不需要在params
这里有列出属性的表单功能。