我正在努力理解这一点。
我有两个模型Person
和Address
。 Person
接受Address
的嵌套属性。
class Person < ApplicationRecord
has_one :address, dependent: :destroy
accepts_nested_attributes_for :address
我有一个app/views/person/new.html.erb
表格:
<%= bootstrap_form_for(@person) do |f| %>
#...
<%= f.fields_for :address do |ff| %>
<%= ff.text_field :apartment_number %>
<%= ff.text_field :building_name %>
<%= ff.text_field :building_number %>
<%= ff.text_field :street %>
<%= ff.text_field :town %>
<%= ff.text_field :postcode, required: true %>
<% end %>
#...
我已经建立了强大的参数,并且创建了如下新记录:
def create
@person = Person.new(safe_params)
if @person.save
binding.pry
else
render 'new'
end
end
private
def safe_params
params.require(:person).permit(
:name,
:date_of_birth,
address: %i[
apartment_number
building_name
building_number
street
town
postcode
]
)
end
但是,这里有两件事。如果@person
验证失败,则重新渲染的new
视图将不包含已提交的地址数据。其次,如果保存成功,则可以看到未创建关联的地址:
@person.address
=> nil
我该怎么做才能确保创建并保存address
?我误会了明显的东西吗?
答案 0 :(得分:1)
根据docs on nested attributes,强参数必须以_attributes
结尾
params.require(:person).permit(
:name,
:date_of_birth,
address_attributes: %i[ apartment_number ]
)