我有这样的一个关联
Article -> has_many comments
comment -> has_many replies
如果我有一个Article a, 通过这样的链获得 a.comments.replies了之后,对其中一个reply这样调用,reply.comment.article.id的话,就会再次查询数据库,而不是直接用之前的article的对象,我怎么样才可以避免?谢谢
我有这样的一个关联
Article -> has_many comments
comment -> has_many replies
如果我有一个Article a, 通过这样的链获得 a.comments.replies了之后,对其中一个reply这样调用,reply.comment.article.id的话,就会再次查询数据库,而不是直接用之前的article的对象,我怎么样才可以避免?谢谢
刚好我前些天也想过这个问题,在网上找了好久也没有答案。最后,只能自己解决了。
我的做法是,override ActiveRecord::Associations::AssociationCollection#find_target, 在这个方法里给每一个target增加一个owner属性,属性值是@owner。之后,使用owner属性就可以了。
除非非常肯定owner是什么,否则这样使用有很大的风险。ActiveRecord本身不支持这样的用法,应该也是有原因的。