别名在一对多关联中

时间:2014-03-02 15:18:35

标签: ruby-on-rails ruby associations

我正在使用Message content以及senderreceiver的{​​{1}}模型,所以我把

  attr_accessible :sender_id
  attr_accessible :receiver_id
  attr_accessible  :content

  belongs_to :user

在我的User模型中

has_many :messages, foreign_key: 'sender_id', class_name: "Message"
has_many :pushes, foreign_key: 'receiver_id', class_name: "Message"

首先,这是最佳做法吗?

顺便说一句,假设我有一些message实例,如何在rails way接收方和发送方实例中进入,而无需编写User.find(message.sender_id)`User.find(message.receiver_id)。 (顺便说一句,我知道我可以使用一些表并使用has_many through mecanism)

2 个答案:

答案 0 :(得分:1)

您的用户模型似乎设置正确。

关于你的第二个问题,你可以这样做:

class Message < ActiveRecord::Base
  belongs_to :sender, class_name: 'User'
  belongs_to :receiver, class_name: 'User'
end

这样,message.sendermessage.receiver都会为您提供用户对象。

答案 1 :(得分:1)

你走在正确的轨道上。

我在我当前的应用程序中有这个:

class Message < ActiveRecord::Base
  belongs_to :to, class_name: User
  belongs_to :from, class_name: User
end

给定一个消息的实例,我只是这样做,例如:

if message.to == current_user
...

我的用户类的相关部分:

class User < ActiveRecord::Base
  has_many :messages, foreign_key: :to_id # These are received messages
  has_many :sent_messages, foreign_key: :from_id, class_name: Message