如何从带有form_tag和复选框的数组中选择选项

时间:2015-08-15 14:30:46

标签: arrays ruby-on-rails-4

我有一个包含源名称(字符串)的数组@sources。在视图中,我想用远程表单中的复选框列出每个源。然后在链接控制器操作中,我希望在params哈希中有一个数组,只包含用户在提交之前已经检查过的那些源。

我尝试手动执行此操作,如下所示:

<%= form_tag select_sources_user_wordsearch_path(@user, @wordsearch), {method: :post, remote: true} do %>
  <% @sources.each do |source| %>
    <div class="form-group">
      <div class="checkbox">
        <label class="pull-left">
          <input type="checkbox" class="pull-right"> <%=source%>
        </label>
      </div>
    </div>
  <% end %>
  <div class="form-group">
    <%= submit_tag "Start Search",id:"search_commit", class: "btn btn-primary" %>
  </div>
<% end %>

但是在提交表单时,我甚至没有看到一个params哈希:

Started POST "/users/1/wordsearches/77/select_sources" for 127.0.0.1 at 2015-08-15 16:18:06 +0200
Processing by WordsearchesController#select_sources as JS
Parameters: {"utf8"=>"✓", "commit"=>"Start Search", "user_id"=>"1", "id"=>"77"}

所以我在四处寻找form_tag助手和check_box_tag发生了什么。在check_box_tag的API page(参见注释)中,我发现可以将一个集合传递给它,并在params散列中的数组中接收选择结果。基本上,我上面描述的。

我想知道如何使用数组(而不是集合)在form_tag内为远程表单完成此操作?

form_tag API page中,我找不到有关数据如何传输到控制器的任何信息。在check_box_tag中没有提到如何处理集合。

谁能告诉我这是怎么做的“Rails方式”? 它必须比我想象的更容易..

1 个答案:

答案 0 :(得分:1)

第一个问题:为什么不使用form_for助手?可能是form_for @wordsearch, url: select_sources_user_wordsearch_path(@user, @wordsearch), {method: :post, remote: true} do

您还可以查看the API中的collection_check_boxes帮助程序。

Afaik这只能与form_for和相应的表单对象一起使用。

<%= form_for @wordsearch do |form| %>
  <%= form.collection_check_boxes(:source_ids, @sources, :id, :labeling_method ) %>
<% end %>

假设@sources是某种对象。在你的情况下

<%= form_for @wordsearch do |form| %>
  <%= form.collection_check_boxes(:sources, @sources, :to_s, :to_s ) %>
<% end %>

也可以。 (没试过!)

另一种方法是手动发送值,如下所示:

<% @sources.each do |source| -%>
   <%= check_box_tag "wordsearch[sources][]", source -%>
   <%= source -%>
<% end -%>

希望这有帮助。