6

我有一个问题正在解决如何做到这一点。我有 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>标签过早关闭。

如何设置这一切,以便不嵌入表单并且第二个表单在表格底部一直关闭,同时仍然使用表单助手?

4

2 回答 2

0

您的根本问题似乎是表单既是动作又是矩形。所以你需要一个更大的矩形内的一个小矩形,每个矩形都有自己不同的动作。CSS 专家可能知道如何编写<form style="display:inline" ...>一个表单可以在另一个表单周围流动,而无需强制执行矩形形状。

于 2013-11-02T17:47:42.973 回答
0

我认为问题在于表单源自 . 如果您将表单的开头移到此处显示的所有 div 之上,并且所有 div 和表格都驻留在表单中,那么它应该可以工作。

我的理解是,表单并不意味着在另一个元素内正确操作一半,因此表单应该在其他元素之内或之外,而不是部分地。

以下是有关表单和表格(和 div)的更多信息:表格内的表格

于 2015-11-24T23:19:02.763 回答