繁体   English   中英

Rails中的n + 1查询,需要解决方案

[英]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')

您还可以使用预先加载。

http://railscasts.com/episodes/22-eager-loading

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM