下面给出了我的应用程序中的模型。我试图找到所有匹配键盘的公司。例如。如果我在我的搜索框中键入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 belongs_to job。我可以迭代 @matse_keyskill.each做| k | k.job.company 结束
获取公司记录。但是,当我尝试这种方法时,它会导致n + 1查询,公司名称也会重复出现。
有没有办法让我只能获得显示页面上显示的公司名称,然后通过点击公司显示与之关联的工作。 另外请让我知道db模型和关联是否正确才能实现它。
答案 0 :(得分:1)
您可以使用“joins”和“inclue”删除n + 1查询:
试试这个,它会根据您的需要为您提供所有公司的列表。
Company.joins(key_skill: :job).where('key_skill.name like ?','java')
您也可以使用预先加载。