Ruby on rails 如何在连接表上执行where条件而不查询循环中的db

Ruby on rails 如何在连接表上执行where条件而不查询循环中的db,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有以下型号 App has_many features Feature has_many translations 现在我想查找一个翻译,看看是否需要创建或更新 App.joins(features: :translations).first.features.each do |feature| languages.each do |lang| translation = feature.translations.where(language: lang)

我有以下型号

App has_many features
Feature has_many translations
现在我想查找一个翻译,看看是否需要创建或更新

    App.joins(features: :translations).first.features.each do |feature|
      languages.each do |lang|
        translation = feature.translations.where(language: lang).first_or_initialize
    end
   end
现在的问题是,我对每种语言都有一个db查找,这是一个相当大的问题,因为我有很多特性。
为了在联接表中查找翻译,我如何从即时加载中获益?

让我们将语言划分为两个数组,找到和未找到:

 found, not_found = languages.partition do |lang| 
   App.joins(:features => :translations).where("translations.language" => lang).present?
 end

 found_language_translations = Translation.where("language in (?)", found)
 new_language_translations = not_found.map{|lang| Translation.new(language: lang) } #This will fire up too many queries though :/