【问题标题】:simple_fields_for form_builder.object returns new object?simple_fields_for form_builder.object 返回新对象?
【发布时间】:2012-10-07 13:09:54
【问题描述】:

我正在尝试了解您应该如何使用 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 关联而构建表单的预期对象?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我只使用它来显示当前对象的表单,通过 link_to_add_association 生成新的表单,因此 section_form.object 永远不是“新”或 nil 对象。我开始认为 form.object 只是返回该表单的类的对象,而不是相关表单的对象。如果是这样 - 当您无法像往常一样将值传递给部分时,您将如何获得实际对象。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多