给定创建的关系,如何在不触发其他数据库查询的情况下访问与某些(非常简单)条件匹配的关系元素?
class Foo < ActiveRecord::Base
has_many :bars
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
joined = Foo.all.joins(:bars).select('foos.*, bars.baz')
a = joined.to_a # no additional query
b = joined.find_by_baz(1) # these will both generate additional queries
c = joined.find_by_baz(4) # even though the data is already available
我可能会遗漏一些简单的东西,但有没有办法通过任意值访问关联的任意元素?
我想到的一个可能的解决方法是将关联加载到由我有兴趣搜索的值索引的数组中。这似乎比理想的更脆弱。
答案 0 :(得分:0)
有几种方法可以过滤数据,一种来自数据库,这就是你所做的:joined.find_by_baz(1)
另一种方法是对数组进行过滤,你可以这样做:
joined.to_a.select{|a| a.baz == 1}
这不会进行额外的数据库调用,但会使用native select within the Enumarable module
就个人而言,我会采用数据库方法。