Rails 嵌套表单为 nilClass 抛出未定义的方法

问题描述 投票:0回答:0

我正在尝试在 Rails 中构建嵌套表单,并在尝试呈现表单时遇到错误,表单/视图无法找到任何模型。

我有一个 Payment 和 Payment_ref 模型:

class Payment < ApplicationRecord
  has_many :payment_refs
  accepts_nested_attributes_for :payment_refs, allow_destroy: true, reject_if: :all_blank
end

class PaymentRef < ApplicationRecord
  belongs_to :payment
end

PaymentRef 有 1 个字符串属性:ref_note

我有一个来自 https://github.com/stevepolitodesign/rails-nested-form-example/blob/master/app/helpers/application_helper.rb 的应用程序助手(使用这个 repo 作为我的实施指南),然后我有这些部分/观点:

# pay.erb.html:
<!-- a bunch of HTML -->
<%= render 'form' %>

# _form.erb.html:
<%= form_with model: @payment, local: true do |f| %>
  <%= f.fields_for :payment_refs do |builder| %>
    <%= render 'payment_ref', f: builder %>
  <% end %>
  <%= link_to_add_fields('Add Payment Ref', f, :payment_refs) %>
<% end %>

# _payment_ref.erb.html:
<%= f.label :ref_note %>
<%= f.text_field :ref_note %>

当我访问 pay 视图时,我得到

Showing /path/to/views/payments/_form.html.erb where line #5 raised:

undefined method `payment_refs' for nil:NilClass

Extracted source:

def link_to_add_fields(name, f, association, **args)
    new_object = f.object.send(association).klass.new

new_object 行突出显示为引发错误的源代码行。

view好像不能通过helper找到模型。我尝试使用 payments 作为 link_to_add_fields 助手调用的参数(而不是 payment_refs),并得到相同的错误,但是 payments 为零。

我能够连接到 Rails 控制台并创建记录:

@pref = PaymentRef.new
@pref.ref_code="Test Ref Code"
@pmnt = Payment.new
@pmnt.payment_refs.push(@pref)
@pmnt.payments_refs[0].ref_code
=> "Test Ref Code"

所以我认为模型设置正确 - 只是无法弄清楚为什么在视图中找不到模型。

ruby-on-rails nested-forms
© www.soinside.com 2019 - 2024. All rights reserved.