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 упростить ваш код.

Другие вопросы по тегам