[英]n+1 query in rails, need solution
下面给出的是我的应用程序中的模型。 我正在尝试找到所有与按键技术匹配的公司。 例如。 如果我在搜索框中键入java,它将使我获得所有匹配的公司和按键技能。
class User < ActiveRecord::Base
has_one :company
end
class Company < ActiveRecord::Base
has_many :jobs
belongs_to :user
end
class Job < ActiveRecord::Base
belongs_to :company
has_many :key_skills, dependent: :destroy
accepts_nested_attributes_for :key_skills, reject_if: :all_blank, allow_destroy: true
end
class KeySkill < ActiveRecord::Base
belongs_to :job
end
我要遵循的步骤是
步骤1:找到与输入单词匹配的所有按键技巧。 (例如:java)
@matched_keyskills = KeySkill.where('name like ?','java')
由于我在作业和按键技能之间存在关联,因此作业has_many key_skills和key_skills属于jobs。 我可以遍历@ matched_keyskill.each | k | k.job.company结束
并获取公司记录。 但是,当我尝试此方法时,它还会导致n + 1查询,并且公司名称也会重复出现。
有没有一种方法可以让我只获得显示在显示页面上的公司名称,然后单击公司显示与之相关的职位。 也请让我知道db模型和关联是否正确才能实现它。
您可以使用“ joins”和“ inclue”删除n + 1个查询:
尝试此操作,它将根据需要提供所有公司的列表。
Company.joins(key_skill: :job).where('key_skill.name like ?','java')
您还可以使用预先加载。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.