Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如何在关联中访问self.id_Ruby On Rails 3_Associations - Fatal编程技术网

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版本有任何直接优势。我想你也可以用作用域做同样的事情,但我倾向于使用类方法。它们感觉更像纯红宝石。