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 :/