simple_fields_for form_builder.object返回新对象?

时间:2012-10-07 13:09:55

标签: ruby-on-rails nested-attributes simple-form fields-for formbuilder

我试图了解如何使用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

然而,当我在partial中调用f.object时,我得到一个包含nil id等的'new'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 undefined。

我应该如何访问使用fields_for has_many关联构建表单的目标对象?

2 个答案:

答案 0 :(得分:0)

我认为您需要构建关联对象并像这样更改代码:

- @document.sections.build if @document.sections.empty?
  = f.simple_fields_for :sections, @document.sections do |section_form|
   = render 'section_fields', :f => section_form

答案 1 :(得分:0)

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

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