Rails полиморфная ассоциация с несколькими атрибутами, использующими его - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть класс Address, который мне нужно использовать в нескольких других моделях, а в некоторых моделях мне нужно использовать его для нескольких атрибутов.Настройка, которую я сделал до сих пор:

class User
  has_one :pickup_address,   class_name: 'Address', as: :location, dependent: :destroy
  has_one :delivery_address, class_name: 'Address', as: :location, dependent: :destroy   
end

class Address
  belongs_to :location, polymorphic: true
end

Класс Address также будет использоваться позже в других моделях, например:

class ServiceProvider
  has_one :address, as: :location
end

Проблема, с которой я столкнулся сейчас, связана с классом User, asон имеет несколько атрибутов, использующих одну и ту же полиморфную модель адреса.При построении модели она позволяет настроить адреса как доставки, так и доставки, но после сохранения, когда я пытаюсь извлечь ее из базы данных, оба поля имеют один и тот же (последний) объект адреса, который был предназначен для delivery_address.

Насколько я понимаю, это происходит потому, что модель сохраняет только один полиморфный идентификатор вместо нескольких.

Мой вопрос заключается в том, как правильно обрабатывать такие ассоциации?Я думаю, что это довольно распространенная проблема в веб-разработке?!

1 Ответ

0 голосов
/ 04 декабря 2018

Я думаю, что в вашей пользовательской модели вы должны использовать belongs_to:

belongs_to :pickup_address, :class_name => "Address", :foreign_key => "pickup_address_id"
belongs_to :delivery_address, :class_name => "Address", :foreign_key => "delivery_address_id"

Это означает, что идентификаторы адресов будут храниться в таблице пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...