预加载与条件匹配的关联与Rails

时间:2015-05-16 10:10:58

标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord

我想只显示具有给定技能的用户以及以下查询正常工作:

@users.joins(:personal_skills).where(personal_skills: search_conditions).distinct

现在,在搜索结果中,在用户附近,我想显示符合personal_skill条件where

我可以为每个用户使用user.personal_skills.where(search_conditions),但这会导致 N + 1查询问题

我该如何避免?

我的意思是, Rails-way ,否则只是迭代返回的行就可以完成任务。实际上,每一行都包含用户数据和连接的技能数据:问题与对象关系映射有关。

简单地将joins替换为includes不是解决方案,因为这会预先加载user.personal_skills而不是我希望实现的过滤集user.personal_skills.where(search_conditions)

1 个答案:

答案 0 :(得分:0)

您可以从personal_skills

获取用户
PersonalSkill.joins(:user).where(search_conditions, where(:user_id => @users.map(&:id))

结果您可以按用户分组技能