2

我试图弄清楚您应该如何使用 Rails 表单生成器(或在本例中为 simple_form)访问对象。

我按照http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for中的描述传入对象,如下所示:

- @document.sections.each do |section|
  = f.simple_fields_for :sections, section do |section_form|
    = render 'section_fields', :f => section_form

但是,当我在部分内部调用 f.object 时,我得到一个包含 nil id 等的“新”Section 对象,从而破坏了我的 link_to 路径。

即使以“标准”方式传递变量似乎也被打破了,例如:

- @document.sections.each do |section|
  = f.simple_fields_for :sections, section do |section_form|
    = render 'section_fields', :f => section_form, :foo => section

在部分内部有 foo 未定义。

我应该如何访问为使用 fields_for has_many 关联而构建表单的预期对象?

4

2 回答 2

0

我认为您需要构建关联对象并更改您的代码,如下所示:

- @document.sections.build if @document.sections.empty?
  = f.simple_fields_for :sections, @document.sections do |section_form|
   = render 'section_fields', :f => section_form
于 2012-10-07T13:47:08.080 回答
0

事实证明,Cocoon 方法“link_to_add_association”正在生成一个新对象,该对象破坏了包含 f.object 的 link_to,因为此时该对象显然不存在。

只需添加“除非 f.object.new_record?” 忽略 Cocoon 生成的新(隐藏)记录。

于 2012-10-07T16:18:32.017 回答