我想只显示具有给定技能的用户以及以下查询正常工作:
@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)
。
答案 0 :(得分:0)
您可以从personal_skills
PersonalSkill.joins(:user).where(search_conditions, where(:user_id => @users.map(&:id))
结果您可以按用户分组技能