如何将选择按钮传递给通过表单提交传递的参数?

时间:2018-06-08 23:09:58

标签: ruby-on-rails forms bootstrap-4

当用户提交表单时,如何允许btn-group的选择与其他参数一起传递?

为了避免通过我冗长的嵌套形式梳理苦差事,我将其分解为一个简单的例子。

这里,@ list是before_action控制器回调的一部分,它收集一组值供使用。这里的想法是让@list中的每个值都通过一组按钮或按钮组提供给用户。

我已经能够使用radio_button传递参数了,但这主要是因为它允许使用.radio_button,如下所示:

<%= form_for(@foo) do |f| %>
  <%= @list.each do |bar_suggestion| %>
    <%= f.radio_button :bar, bar_suggestion, value: bar_suggestion %><%= bar_suggestion>
  <% end %>
<% end %>

然而,当我尝试使用&#34;标准&#34; Bootstrap按钮或btn-group,每当我尝试使用&#34; name&#34;设置所需的params散列时,它不会将自身附加到活动表单对象,因此它不会正确传入。

<%= form_for(@foo) do |f| %>
  <%= @list.each do |bar_suggestion| %>
    <button type="button" class="btn btn-primary" name="foo_params[bar]" value=<%= bar_suggestion %>><%= bar_suggestion %>
  <% end %>
<% end %>

如何告诉它引用回表单对象?我尝试使用f.button而不是f.radio_button,但每当我点击它时,它就像提交按钮一样,它会立即提交表单,而不是简单地代表一个选定的按钮。

这是JavaScript发挥作用的地方吗?有没有办法在没有JS的情况下做到这一点?

1 个答案:

答案 0 :(得分:0)

在处理包含许多嵌套元素的复杂表单时,为了使按钮选择传递到随表单提交一起发布的参数中,用于name属性的是键(即)

在我的特定情况下,我错误地假设表单对象在模型链中的进度也会在使用输入标签时同样应用于输入标签。

因此举一个具体的例子。即使表单看起来像这样:

<%= form_for @object do |f| %>
  <%= f.fields_for :related_model_1 do |rm1| %>
    <%= rm1.fields_for :related_model_2 do |rm2| %>
      <%= rm2.fields_for :related_model_3 do |rm3| %>

...当需要设置按钮的输入字段时,必须使用完整的参数“ path”作为名称。因此,如果related_model_3有一个名为“ content”的字段,我们希望按钮的选择为其设置值,那么它可能看起来像这样:

<input type="radio" name="object[rm1][rm2][rm3][content]" ... >

然后,当用户选择按钮并提交表单时,将使用按钮指定的value属性值传递给name属性中上述参数路径。

如果您要仔细检查name属性应使用的内容,请使用.radio_button方法(即rm3.radio_button)设置按钮,拉起页面并使用F12进行检查,然后点击进入相关的源代码,以查看为单选按钮生成了什么名称属性。

我希望这对其他可能为这样显而易见的答案所困扰的人有所帮助!再次感谢@muistooshort给您的初步帮助和快速的评论回复!