Rails 5: почему я не могу сохранить вложенные атрибуты? - PullRequest
0 голосов
/ 09 июля 2019

Я борюсь с пониманием этого.

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

1 Ответ

1 голос
/ 10 июля 2019

В соответствии с документами на вложенные атрибуты сильные параметры должны заканчиваться _attributes

params.require(:person).permit(
  :name,
  :date_of_birth,
  address_attributes: %i[ apartment_number ]
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...