Два внешних ключа с ActiveRecord? [рельсы] - PullRequest
4 голосов
/ 31 января 2009

У меня есть класс User со ссылкой на класс Message. Класс сообщения имеет user_id (который является отправителем) и receiver_id. Так что в классе пользователя у меня есть

  has_many :messages
  has_many :messages, :foreign_key => "receiver_id"

и затем в классе сообщений у меня есть

  belongs_to :user

Первые отношения - через user_id - проходят на отлично. Я не имею ни малейшего представления, что поместить в класс Message для второго отношения. Таблица сообщений построена как с user_id, так и с receiver_id, поэтому поддержка существует.

Возможно ли это вообще?

Кроме того, тогда я бы понятия не имел, как добраться до сообщений, полученных пользователем ... или пользователем, получившим сообщение:)

[Я знаю, что могу обойти это, имея таблицу отправителей, таблицу получателей, таблицу сообщений и, может быть, кучу других таблиц (таблицу разговоров!), Но я бы хотел сделать это так, для удовольствия. Это приложение будет использоваться только для обучения.]

Также важно: где будут документы для этого? Это не очень полезно.

1 Ответ

11 голосов
/ 31 января 2009

В вашем классе пользователя:

has_many :messages
has_many :received_messages, 
         :foreign_key => "receiver_id", :class_name => "Message"

В вашем классе сообщений:

belongs_to :user
belongs_to :receiver, :class_name => "User"


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