有关关联的嵌套表单属于_to

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

我有类

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

ruby-on-rails simple-form nested-forms fields-for
1个回答
0
投票

它是一个

belongs_to
关联,这并不意味着您不能像使用
accepts_nested_attributes_for :fingerprint
关联一样使用
has_*

唯一的问题是您在

fingerprint_attributes
通话中需要
fingerprints...
(不是
permit
复数)。因此,在
create
中,您只需先有
@person = Person.new(person_params)
,然后是
@person.save
。您尚未在此处显示它,但在您的
new
操作中,您需要实例化您在表单中使用的
fingerprint
记录中的
@person

© www.soinside.com 2019 - 2024. All rights reserved.