нужна помощь относительно ассоциации моделей в рельсах - PullRequest
0 голосов
/ 27 июня 2011

Мой сценарий - у меня есть модель пользователя, модель контакта и модель 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. Я не знаю, является ли это лучшим способом справиться с этой ситуацией, но было бы здорово, если бы вы могли помочь мне в этой ситуации.

1 Ответ

1 голос
/ 28 июня 2011

Пока user has_many :contacts, :through=> :user_contacts мне кажется, что user_contacts - это лучшее место для хранения частного URL для каждого контакта в списке контактов пользователя. И общедоступный URL, вероятно, должен храниться в таблице users (по одному на пользователя).

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