Rails: 简单表单外的多个提交按钮

Rails: multiple submit button outside simple form

假设我有一个 Article 模型,在 Article 模型 'settings' 视图中,我在表单外有两个提交按钮,"update Details" 和 "Next Template"。

我的问题是我怎么知道在控制器中点击了哪个按钮。这两个提交按钮都在一个简单的表单之外。 我试过:

 <%= f.submit "update Details",name: "update_details", class: "x-update" %>


<%= f.submit 'Next Template', name: "next_template", class: "x-next" %>

和控制器上的逻辑相同

   if params[:update_details]
      [..]
   elsif params[:next_template]
      [..]
   end

但它不起作用。我怎么做?我无法更改路由,所以有没有办法发送由 [:params] 获取的不同变量?

我想你可以这样做:

<%= f.submit "update Details",name: "update_details", value: true, class: "x-update" %>
<%= f.submit 'Next Template', name: "next_template", value: true, class: "x-next" %>

我认为您可以选择使用相同的名称和不同的值。

<%= f.submit "update Details",name: "next_template", value: false,  class: "x-update" %>
<%= f.submit 'Next Template', name: "next_template", value: true, class: "x-next" %>

在控制器中:

if params[:next_template]
  something
else
  something_else
end

请尝试将两个按钮都放在表单中,然后尝试使用相同的逻辑。

我通过输入 html 表单模板解决了这个问题:

<input type="hidden" name= "action_type" id="action_type">

然后在 JavaScript 文件中我们添加了

$('.x-update').on 'click', ->
$("#action_type").val("exit")
$("#details-form").submit()

然后在控制器文件中我们检查了参数:

if params[:action_type] == "exit"
  redirect_to #your desired path
else
  redirect_to #based on given path

就是这样。有效。

尝试在控制器中检查触发提交时获得的参数。

render plain: params

附加 您可以在表单中使用 "hidden_field_tag" 选项。

<%= hidden_field_tag 'plan', params[:plan] = 2 %>