我必须与遗留数据库中的某些数据进行交互,而这些数据不属于我的应用程序。我需要从两个来源加载数据而不会导致n + 1个查询。
thing.rb
class Thing
# Lives in my applications DB
belongs_to :other_thing
end
other_thing.rb
class OtherThing
establish_connection(:other_database)
has_many :things
end
Thing.includes(:other_thing)
因为other_things处于不同的架构中,所以不起作用。
Thing.all.map(&:other_thing)
可以工作,但会生成n + 1个查询。
到目前为止,这是我提出的最佳选择:
things = Thing.all
other_things = OtherThing.find(things.map(&:other_thing_id))
things = things.map{|t| t.other_thing = other_things.select{|ot| ot.id == t.other_thing_id}.first; t }
这只会产生2个查询,但我认为必须有更好的解决方案。
答案 0 :(得分:1)