我有一个问题正在解决如何做到这一点。我有 2 个表单需要彼此相邻显示,但您不能嵌入表单,我只需将第 2 个表单放在第一个表单之后就可以解决这个问题。
但是,rails 忽略了我<% end %>
对第二个表单的标签,它会在需要关闭第二个表单之前自动关闭它。这使我的表格不起作用。
这是为简洁起见省略了一些位的视图。
<div class="row">
<div class="col-md-3">
<div class="well">
<%= render "shared/some_form", url_path: foo_path %>
<%= form_tag some_other_path, method: :delete, id: "form_bulk_action", role: "form" do %>
<div id="bulk_action_group">
<div class="form-group">
<%= label_tag "perform_bulk_action", "For each checked item" %>
<%= select_tag "perform_bulk_action", options_for_select([ ["Delete", "destroy"] ]), class: "form-control" %>
</div>
<%= button_tag id: "foo" %>
</div>
</div>
</div>
<div class="col-md-9">
<table class="table table-condensed table-hover">
<thead>
<tr>
<th><%= check_box_tag :check_all_data_rows, "", false %></th>
</tr>
</thead>
<tbody>
<% @foo.each do |foo| %>
<tr>
<td><%= check_box_tag "bulk_ids[]", foo.id, false, %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
<% end %>
加载 some_form 的部分是第一个表单。该形式的开始和结束发生在部分内部。
第二种形式是form_tag。正如您从 html 标记中看到的那样,我们在左侧有一个侧边栏,右侧的主要内容被加载到一个表格中。
第二种形式的想法是它允许您检查行,然后对已检查的项目执行批量操作。类似于您在 gmail 中标记 15 封电子邮件然后删除它们的方式。
问题是 rails 忽略了<% end %>
该代码片段底部的 ,而是</form>
在带有id: foo
.
这导致 bulk_ids 值始终为零,因为此时表单已经关闭并且它们不是表单的一部分。疯狂的是,只有当您从另一个页面(即 turbolinks)转到该页面时它才会失败。当您完全加载页面时它可以工作,但是我认为主要问题是</form>
标签过早关闭。
如何设置这一切,以便不嵌入表单并且第二个表单在表格底部一直关闭,同时仍然使用表单助手?