【发布时间】:2012-03-15 22:32:55
【问题描述】:
我的嵌套表单有问题。我正在使用 Ryan Bates 的代码。 Gemfile sn-p:
gem "nested_form", :git => 'https://github.com/ryanb/nested_form.git'
问题是,当我尝试使用 *link_to_add* 时,我得到一个看起来正常的新项目,但它不起作用,因为它得到一个新的索引 0 而不是基于当前时间的“随机”索引nested_form.js 应该生成。我添加的每个项目都有相同的 0 索引。所以效果是我无法添加新项目(或仅保存最后一个新项目,具体取决于模型的原始状态)。
新的父对象和编辑父对象时的行为是相同的。
我很确定我做错了什么,因为我能够做一个简单的新应用程序。但我无法弄清楚我的真实应用有什么问题。
为我的(工作的)测试应用程序和我的(不工作的)真实应用程序生成的nested_form.js 是相同的。所以我认为版本差异没有问题。
我使用 Firebug 单步执行了nested_form.js 中的代码,但无法弄清楚为什么它会在那里生成 0 索引。
我的父模型有这个:
类课程<:base>
accepts_nested_attributes_for :levels, :allow_destroy => true
has_many :levels, :dependent => :destroy, :order => :depth
我的表单是这样实例化的:
<%= nested_form_for(@course) do |f| %>
有嵌套对象的部分是这样的:
<%= f.fields_for :levels do |builder| %>
<tr>
<td><%= builder.text_field :name %></td>
<td><%= image_tag(builder.object.icon) unless (builder.object.icon.nil?) %></td>
<td><%= builder.link_to_remove "Remove" %></td>
</tr>
<% end %>
<tr><td><%= f.link_to_add "Add a level", :levels %></td></tr>
我看不出我的代码和我的工作示例(或我见过的其他示例)之间有任何区别。
有人有什么想法吗?
更新:
在尝试在 Firebug 中进行更多调试后,我意识到 nested_form.js 中的 addFields 函数使用的“蓝图”在 addFields 方法中发生了更改,这就是为什么它没有放入生成的索引(那个块是在我的测试应用程序中被绕过)。所以我通过改变覆盖了发生这种情况的块:
if (context) {
到:
if (false)
这似乎从初步测试中解决了我的症状,但我感觉在某些情况下 (NPI) 这可能破坏了其他东西(可能有多个嵌套级别?)。
【问题讨论】:
标签: ruby-on-rails nested-forms nested-attributes