答案 0 :(得分:64)
答案 1 :(得分:7)
我们在rails中使用advanced constraints解决了。
我们的想法是拥有相同的路径(因此具有相同的命名路由和操作),但约束路由到不同的操作。
resources :plan do
post :save, constraints: CommitParamRouting.new("Propose"), action: :propose
post :save, constraints: CommitParamRouting.new("Finalize"), action: :finalize
end
CommitParamRouting
是一个简单的类,它有一个方法matches?
,如果commit参数匹配给定的实例attr,则返回true。值。
这可用作宝石commit_param_matching。
答案 2 :(得分:6)
也可以在 form_for 帮助器上完成,就像这样
otherwise
并且控制器上的逻辑相同
<%= f.submit "Publish",name: "publish", class: "tiny button radius success" %>
<%= f.submit 'Mark as Draft', name: "draft", class: "tiny button radius " %>
答案 3 :(得分:1)
答案 4 :(得分:0)
您还可以在提交按钮上设置一些data
属性,并使用JavaScript在点击其中一个按钮时更改form
操作
答案 5 :(得分:0)
通常我使用John Topley给出的建议(见上面的答案)。 另一种方法是在单击提交按钮时使用JQuery / JS更改表单操作属性 例如:
form_tag({} ,:method => 'post', :id => 'reports_action') do
.......
.......
submit_tag 'submit', :onclick => "return changeAction();"
end
然后......
function changeAction(){
$('#reports_action').attr('action','my_new_action');
}