轨道表单中的多个“提交”按钮

时间:2011-03-27 22:29:38

标签: ruby-on-rails

我正在尝试在为产品创建对象之前实现“预览”功能。我按照Ryan Bates的轨道广播进行了这样做,他通过传递参数:name和提交按钮来实现这一目的。

<%= submit_tag 'Preview', :name => 'preview_button' %>

然而,它不适用于我的情况,不知道为什么,可能是因为我使用的是rails 3,我说不清楚,但是当我添加时我没有看到任何变化:name =&gt; 'preview_button'带有提交按钮。有谁能建议我解决方案?

2 个答案:

答案 0 :(得分:3)

添加Paulo的答案,根据提交参数路由到不同的操作可能会更好。

我们在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

答案 1 :(得分:0)

您需要添加两个名称不同的提交按钮

<%= submit_tag 'Submit', :name => 'submit_button' %>
<%= submit_tag 'Preview', :name => 'preview_button' %>

然后在你的控制器中你需要检查参数:

if params[:commit] == "Submit"
# do great stuff
end
if params[:preview] == "Preview"
# preview great stuff
end