我正在使用this cool gem ryanb nested_forms,但我无法让它正常工作......
我有两个级别的嵌套表单。
class Etude
has_many :phases
class Phase
has_many :affectations
class Affectation
基本上,为了简单起见,我有一个阶段表,每个阶段我都有一个表格单元格,我在其中放置了嵌套的表格。我使用<%= f.object.id %>
为每个嵌套表生成一个唯一的id,所以我可以使用data-target。
它适用于第一次嵌套(练习曲中的许多阶段),但是我不能将“影响”放入“体内阶段”中。 他是我的颂歌
_phases.html.erb
<%= nested_form_for @etude, :method => :post, :remote => true do |f| %>
<table class="table table-striped table-bordered table-hover" id="tableau_phases">
<thead>
blablabla
</thead>
<tbody>
<%= f.fields_for :phases, :wrapper => false %>
</tbody>
</table>
<!-- I use an other table tag otherwise new entries would appear after the "add_phase" link -->
<table class="table table-striped table-bordered table-hover">
<tr><td>
<%= f.link_to_add t("add_phase"), :phases, :data => { :target => "#tableau_phases" } %>
</tr></td>
</table>
<% end %>
_phase_fields.html.erb
<tr>
My fields
</tr>
<tr>
<td colspan="5">
<table id="<%= f.object.id %>" class="table table-striped table-bordered table-hover liste-intervenants">
<thead>
stuff
</thead>
<tbody><% f.fields_for :affectations %></tbody>
</table>
</td>
</tr>
<tr>
<td colspan="5">
<%= f.link_to_add "Ajouter un intervenant", :affectations, :data => { :target => "##{f.object.id}"} %>
</td>
</tr>
_affectation_fields.html.erb
只是一些非常简单的<tr><td></td></tr>
内容
问题:
点击链接后添加一个新的效果,它不会把东西放在他的表中,但会创建一个额外的div。他是DOM中的样子
<table id="8354u3r1jh534g2fh">
<thead>headers</thead>
<tbody>EMPTY !!!</tbody>
<div class="fields"> Stuff is added there and not in the tbody !</div>
</table>
这很奇怪,因为我有一个:data => { :target => "##{f.object.id}"}
应该处理在tbody中插入日期(我已经检查过了,这个代码实际上输出了好东西)
注意:它对第一级嵌套表单(@etude中的阶段)非常有效
答案 0 :(得分:0)
我修复了它,以及我在途中发现的其他问题:
FIX原始问题:我忘记了第二级嵌套表单的:wrapper => false
_phase_fields.html.erb
<tr>
<td colspan="5">
<table id="<%= f.object.id %>" class="table table-striped table-bordered table-hover liste-intervenants">
<thead>
stuff
</thead>
<tbody><% f.fields_for :affectations, :wrapper => false %></tbody>
</table>
</td>
</tr>
问题2 :现在我仍然发生了奇怪的事情。例如,当我在我的前端有这个时
Etude
Phase 1
[nothing]
Phase 2
[>> I Click "link_to_add" to add a new nested child "Intervenant 2.1"]
然后结果变为
Etude
Phase 1
[Intervenant 2.1]
Phase 2
[nothing]
相关的代码片段位于 _phase_fields.html.erb
<%= f.link_to_add "Ajouter un intervenant", :affectations, :data => { :target => "##{f.object.id}"} %>
现在看来"##{f.object.id}"
即使对于不同的“嵌套孩子”也是如此。这实际上是宝石的错误吗?
问题2的FIX
实际上,应根据rails API的建议,使用f.index
完成ID生成。
问题3
嵌套嵌套表单不会为动态添加的字段生成良好的ID元素!
_affectation_fields.html.erb
==&GT; <%= f.xxxx %>
会产生etude[phases_attributes][new_phases][affectations_attributes][1415653508668][nb_jeh]
之类的内容。问题是[new_phase]没有被适当生成的阶段ID替换
问题3的FIX
在每个部分中,在<tr>
中包裹<tbody class="fields">
或者如果只有一个<tr>
,请将.fields
类添加到其中
解释:
深度嵌套表单依赖于gem nested_form regexp match&amp; replace Javascript。并且the code使用将查找DOM元素的jquery函数,首先转到最近的.fields
祖先。
例如:link_to_remove
将转到最近的.fields
,隐藏它,并将_destroy
设置为true。