1

我有这样的用户模型

class User < ActiveRecord::Base 

has_many :received_msgs, class_name:"Message", foreign_key: "recipient_id", :conditions =>['owner_id = ?', self.id]
has_many :sent_msgs, class_name: "Message", foreign_key: "sender_id", :conditions =>['owner_id = ?', self.id]

我希望 owner_id 几乎充当辅助外键,因为每条消息都被复制以进行独立删除。

但是,我收到一条错误消息,说没有为对象定义 id。在这种情况下如何访问 self.id?或者有没有更好的方法来做到这一点?

谢谢

4

1 回答 1

2

你确定你不只是想要那个foreign_keyowner_id?这样,您根本不需要那个conditions数组。

无论如何,您无法self.id在关联定义中访问的原因是代码的评估范围。在加载类时评估关联,而不是在实例上实际调用#received_msgs方法时评估。User

我相信您可以self.id通过将条件数组包装在 lambda 中来访问实例。这样,在您调用它之前不会对其进行评估。

于 2012-07-17T12:23:52.847 回答