我正在尝试在 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"
所以我认为模型设置正确 - 只是无法弄清楚为什么在视图中找不到模型。