我正在尝试了解您应该如何使用Rails Form Builder(或在本例中为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关联访问正在为其构建表单的预期对象?
我认为您需要构建关联的对象并像这样更改代码:
- @document.sections.build if @document.sections.empty?
= f.simple_fields_for :sections, @document.sections do |section_form|
= render 'section_fields', :f => section_form
事实证明,Cocoon 方法"link_to_add_association"正在生成一个新对象,该对象正在破坏包含 f.object 的link_to,因为该对象显然不存在。
简单地添加"除非f.object.new_record?"会忽略Cocoon生成的新(隐藏)记录。