Rails Relations
У меня есть 3 таблицы:
profiles, users, payment_details
Сейчас в models/user.rb
У меня есть следующее:
has_one :profile, :dependent => :destroy
has_one :payment_detail, :dependent => :destroy
В models/profile.rb
Я имею:
has_one :payment_detail, :through => :user
И в models/payment_details.rb
Я имею:
has_one :profile, :through => :user
Тогда у меня есть :profile
форма с :payment_details
вложенная форма.
По какой-то причине :payment_details
получает :user_id
обновляется с :id
от :profiles
вместо :user_id
от :profiles
1 ответ
Основываясь на документации, поведение accepts_nested_attributes_for
не кажется четко определенным для :through
ассоциации. Обычно предполагается, что эти отношения являются прямыми родителями и детьми, поэтому неудивительно, что вы увидите странное поведение, подобное этому.
Вы должны либо обработать форму через User
модель, принимая атрибуты для PaymentDetail
модель, или объединить ваши модели в некотором роде. Я редко нахожу это полезным для использования has_one
ассоциации, потому что затраты на их обслуживание, как правило, перевешивают выгоды, но это всегда зависит от вашего варианта использования. Если у вас не слишком много столбцов, вы можете объединить User
с Profile
и, может быть, с PaymentDetail
упростить ваш код.