Я борюсь с пониманием этого.
У меня есть две модели 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
? Я неправильно понял что-то очевидное?