Ruby on rails 3 如何在关联中访问self.id
我的用户模型是这样的Ruby on rails 3 如何在关联中访问self.id,ruby-on-rails-3,associations,Ruby On Rails 3,Associations,我的用户模型是这样的 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 =
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]
class用户['owner\u id=?',self.id]
有很多:已发送消息,类名称:“消息”,外键:“发件人id”,条件=>['owner\u id=?',self.id]
其中,我希望owner_id几乎充当辅助外键,因为每个消息都是重复的,以便独立删除
但是,我得到一个错误,说没有为对象定义id。在这种情况下,如何访问self.id?还是有更好的方法
谢谢您确定不只是想让
外键
成为所有者id
?这样,您根本不需要条件
数组
无论如何,您无法访问关联定义中的self.id
的原因是因为代码的计算范围。在加载类时评估关联,而不是在用户
实例上实际调用#received_msgs
方法时评估关联
我相信您可以通过在lambda中包装conditions数组来访问实例的
self.id
。这样,在您调用它之前不会对其进行计算。谢谢Frost,我最终在用户类中定义了两个方法,通过调用self.sent.where(:owner\u id=>self.id)来过滤结果。在关联定义中使用lambda比使用我上面描述的工作环境有什么优势吗?谢谢。不,我不认为在这种情况下使用lambda版本有任何直接优势。我想你也可以用作用域做同样的事情,但我倾向于使用类方法。它们感觉更像纯红宝石。