我有一个包含源名称(字符串)的数组@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方式”? 它必须比我想象的更容易..
答案 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 -%>
希望这有帮助。