我有类
Person
和 Fingerprint
,我想使用嵌套表单来填充指纹的属性。
实现如下:
class Person < ApplicationRecord
belongs_to :fingerprint
end
class Fingerprint < ApplicationRecord
end
人的控制器:
def create
@person = Person.new(person_params)
@person.build_fingerprint
respond_to do |format|
if @person.save
....
end
def person_params
params.require(:person).permit(:name, fingerprints_attributes: [:fingertips_category])
end
人形:
%= form_with(model: person) do |form| %>
...
<div>
<%= form.label :name, style: "display: block" %>
<%= form.text_area :name %>
</div>
<%= form.fields_for :fingerprint do |fingerprint_form| %>
<%= fingerprint_form.label :fingertips_category %>
<%= fingerprint_form.text_field :fingertips_category %>
<% end %>
<div>
<%= form.submit %>
</div>
<% end %>
不幸的是,我不知道如何在
Fingerprint's attributes
方法的帮助下初始化 build_fingerprint
。
它是一个
belongs_to
关联,这并不意味着您不能像使用 accepts_nested_attributes_for :fingerprint
关联一样使用 has_*
。
唯一的问题是您在
fingerprint_attributes
通话中需要 fingerprints...
(不是 permit
复数)。因此,在 create
中,您只需先有 @person = Person.new(person_params)
,然后是 @person.save
。您尚未在此处显示它,但在您的 new
操作中,您需要实例化您在表单中使用的 fingerprint
记录中的 @person
。