рельсы путь от пользователя к обмену сообщениями, мне нужна таблица соединений? - PullRequest
1 голос
/ 28 октября 2010

Быстрый вопрос (я думаю). У меня есть пользователи, и я хотел бы разрешить им отправлять сообщения друг другу. Мой вопрос заключается в том, нужно ли мне иметь пользовательскую таблицу, таблицу сообщений и таблицу присоединения пользователей к сообщениям, или мне просто сохранять to_user_id и from_user_id в таблице сообщений. Если последнее, как будет выглядеть ассоциация для этого? Можете ли вы даже сослаться на «локальный» ключ для ассоциации?

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

Вы можете сделать это с помощью пары простых has_many ассоциаций. Поскольку он самореферентный, вам нужно переопределить часть магии Rails, чтобы она заработала.

class User < ActiveRecord::Base
  has_many :sent_messages, :class_name => 'Message', :foreign_key => 'sender_id'
  has_many :received_messages, :class_name => 'Message', :foreign_key => 'recipient_id'
end

class Message < ActiveRecord::Base
  belongs_to :sender, :class_name => 'User'
  belongs_to :recipient, :class_name => 'User'
end

У Rails нет более чистого способа создания ассоциативных ссылок, о которых я знаю.

0 голосов
/ 28 октября 2010

Я думаю, что последний звучит нормально. Это не в моей голове, но я знаю, что у ассоциаций AR есть такие варианты ...

class Message < ActiveRecord::Base
  belongs_to :sender, :class_name => :user, :foreign_key => :from_user_id
  belongs_to :recipient, :class_name => :user, :foreign_key => :to_user_id
  #...
end

class User < ActiveRecord::Base
  has_many :received_messages, :class_name => :message, :foreign_key => :to_user_id
  has_many :sent_messages, :class_name => :message, :foreign_key => :from_user_id
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...