Html Rails正在添加一个</表格>;标记在一个不是我关闭do块的位置,它正在破坏我的表单
我在想怎么做时遇到了一个麻烦。我有两个表单需要相邻显示,但不能嵌入表单,我只是将第二个表单放在第一个表单之后 但是,rails忽略了第二个表单的Html Rails正在添加一个</表格>;标记在一个不是我关闭do块的位置,它正在破坏我的表单,html,ruby-on-rails,forms,erb,Html,Ruby On Rails,Forms,Erb,我在想怎么做时遇到了一个麻烦。我有两个表单需要相邻显示,但不能嵌入表单,我只是将第二个表单放在第一个表单之后 但是,rails忽略了第二个表单的标记,并且在需要关闭第二个表单之前自动关闭它。这使得我的表格不起作用 以下是为简洁起见略去部分内容的视图 <div class="row"> <div class="col-md-3"> <div class="well"> <%= render "shared/some_form", u
标记,并且在需要关闭第二个表单之前自动关闭它。这使得我的表格不起作用
以下是为简洁起见略去部分内容的视图
<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 %>
加载某种形式的部分是第一种形式。该形式的开始和结束发生在部分的内部
第二种形式是form_标签。从html标记中可以看到,左侧有一个侧栏,右侧的主要内容加载到一个表中
第二种形式的思想是,它允许您签出行,然后对签出的项目执行批量操作。类似于在gmail中标记15封电子邮件,然后将其删除
问题是rails忽略了该代码段底部的
,而是在按钮后面注入了一个
,并带有id:foo
这会导致bulk_id值始终为nil,因为此时表单已经关闭,并且它们不是表单的一部分。疯狂的是,只有当你从另一个页面(即TurboLink)转到该页面时,它才会失败。当你完全加载页面时,它会工作,但是我认为主要问题是
标签过早关闭
如何设置所有这些,使表单不被嵌入,并且第二个表单在仍然使用表单帮助程序的情况下一直关闭在表的底部?您的根本问题似乎是表单是动作和矩形。所以你需要在一个更大的长方形里面放一个小长方形,每个长方形都有自己不同的动作。CSS专家可能知道如何编写一个
,这样一个表单就可以在另一个表单上流动,而不必强制使用矩形形状。我认为问题在于,表单是由内部的render shared/some_form调用生成的,但是关闭表单的代码在该div之外,在表之后。如果将表单的开头移到此处显示的所有div之上,并且所有div和表都位于表单中,那么它应该可以工作
我的理解是,一个表单不能在另一个元素内部正确运行,因此一个表单应该在其他元素内部或外部,而不是部分
下面是关于表单和表(以及div)的更多信息:您如何知道Rails正在添加标记?你的HTML是不平衡的,你的代码太低。例如,我认为如果Chrome看到了这一点,那么它将“原谅”不平衡的标签,并在它所属的位置插入一个标签。例如,如果您使用上下文菜单->检查元素来查看代码,您将看到Chrome的内部元素数据库,而不是它的原始源代码。您应该使用View Source查看Web服务器发送的内容(因为ERB、AFAIK不会为您平衡标记)。更好的是,您还应该使用自动测试来验证断言。我想是Chrome加的吧?我有模型/功能测试,它们都通过了,因为bulk_id值是一个硬编码数组。我真的不知道如何重新组织我的html以使其正常工作。你需要回答你是如何“看到”标签的。如果标签不存在,唯一能看到的方法就是Chrome的Inspect元素。ViewSource说了什么,您的自动测试说了什么?它显示在Chrome的inspect元素中。在视图源中,它位于底部。我的自动化测试什么都没说,因为我没有为该功能编写端到端测试,只有批量id值被存根的模型/功能测试。至少你有测试!但是用真实的模型对象编写功能测试,而不是存根。但是我不明白这些额外的东西是从哪里来的,因为如果你用它生成了破损的HTML Rails。或者我是这么想的。。。