我正在尝试在为产品创建对象之前实现“预览”功能。我按照Ryan Bates的轨道广播进行了这样做,他通过传递参数:name和提交按钮来实现这一目的。
<%= submit_tag 'Preview', :name => 'preview_button' %>
然而,它不适用于我的情况,不知道为什么,可能是因为我使用的是rails 3,我说不清楚,但是当我添加时我没有看到任何变化:name =&gt; 'preview_button'带有提交按钮。有谁能建议我解决方案?
答案 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