Мой сценарий - у меня есть модель пользователя, модель контакта и модель profile_url.
Ниже приводится связь между пользователем и моделями контактов.
user has_many :contacts, :through=> :user_contacts
user has_many :user_contacts
contact has_many :users, :through=>:user_contacts
contact has_many :user_contacts
user_contact belongs_to :user
user_contact belongs_to :contact
пока все хорошо. Проблема возникает, когда я пытаюсь связать эти модели с моделью profile_url. Сценарий заключается в том, что всякий раз, когда пользователь регистрируется в приложении, ему назначается URL-адрес профиля, который будет общедоступным URL-адресом профиля. Так что, если я зарегистрируюсь, у меня будет что-то вроде http://www.mysite.com/mike.fererra в качестве общедоступного URL моего профиля Теперь, когда я добавлю вас в список контактов в свой список контактов, вам будет назначен частный URL-адрес для моего профиля (тот же профиль, вам предоставляется только уникальный URL-адрес, который предназначен только для вас). Таким образом, в основном, есть два способа или, скорее, два URL для доступа к моему профилю, публичный URL и частный URL. Трудно объяснить, почему мне нужно разделить URL-адреса, но просто подумайте, что другого пути нет, если вам интересно.
Я вижу это через STI (наследование одной таблицы) примерно так:
ProfileUrl < ActiveRecord::Base
PublicUrl < ProfileUrl
PrivateUrl < ProfileUrl
profile_url belongs_to :user
user has_one :profile_url
profile_url has_one :public_url
profile_url has_many :private_urls
private_url belongs_to :contact
contact has_one :private_url
Я надеюсь, что это имеет смысл, в двух словах, история вращается вокруг профиля пользователя и способов доступа к этому профилю (общедоступный URL для всего мира и частный URL, относящийся только к контактам этого пользователя, каждый контакт будет иметь уникальный частный URL к тому же профилю пользователя, которому принадлежит контакт). Таблица профиля имеет поля типа user_id, contact_id, url. Я не знаю, является ли это лучшим способом справиться с этой ситуацией, но было бы здорово, если бы вы могли помочь мне в этой ситуации.