使用相对较大的数据集我遇到的情况是我需要使用关联的表加载数据,然后在关联的对象需要回调到第一个对象的过程中。但是它似乎没有填充对象的后引用,所以即使使用:include它有很多sql查询
例如:
class Movie
belongs_to :title
end
class Title
has_one: movie
end
首先,我通过
加载数据Movie.all(:include => [ :title ])
这导致两个sql查询。一个用于加载所有电影,另一个用于按ID加载所有标题。
其次(出于简单演示的目的)我想用标题来取回电影。
movies.collect{ |movie|
cur_title = movie.title
back_reference = cur_title.movie
}
这就是问题所在。我假设不需要进一步的查询作为已经加载的一对一关系的双方。但是,collect中的第二行会导致许多新查询加载标题中的每个“电影”。有没有办法让rails在标题内自动填写这个反向引用以避免许多额外的(冗余)查询,或者这可以通过简单的方式手动完成?
在Rails 2.3.12下运行
答案 0 :(得分:2)
Rails 3.x有一个名为:inverse_of
的机制来指定反向关联。
即;
class Movie
belongs_to :title, :inverse_of => :movie
end
class Title
has_one :movie, :inverse_of => :title
end
在这种情况下,您将无法重新加载。
在Rails 2.x中,您可能会发现@ h-lame的parental_control是一个有用的临时解决方案。