Rails在一个不是我关闭do块的地方添加了一个</ form>标签,它打破了我的形式

Ant*_*lad 6 html forms ruby-on-rails erb

我正在研究如何解决这个问题.我有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 %>
Run Code Online (Sandbox Code Playgroud)

加载some_form的部分是第一种形式.该形式的开头和结尾发生在部分内部.

第二种形式是form_tag.正如您从html标记中看到的那样,我们左侧有一个侧边栏,右侧的主要内容被加载到表格中.

第二种形式的想法是它允许您检查行,然后对已检查的项目执行批量操作.与您在gmail中标记15封电子邮件然后删除它们的方式类似.

问题是rails忽略了<% end %>代码片段的底部,而是</form>在按钮后面注入了一个id: foo.

这导致bulk_ids值始终为nil,因为此时表单已经关闭,并且它们不是表单的一部分.疯狂的是,只有当你从另一个页面转到页面时才会失败(即turbolinks).当你完全加载页面时它会起作用,但我认为主要问题是过早关闭</form>标签.

我如何设置这一切,以便表格没有嵌入,第二个表格在表格底部完全关闭,同时仍然使用表单助手?

Phl*_*lip 0

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