关联模型中的查询优化

时间:2015-07-07 11:02:54

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

我有User型号

class User < ActiveRecord::Base
  has_many :skills
  has_one :profile
end

Profile表有两列名为age&amp; experience

现在,我传递参数的搜索表单是:

params[:skill_ids] = [273,122,233]
params[:age] = "23"
params[:experience] = "2"

我可以搜索用户的技能与params[:skill_ids]中的任何一个以及用户的个人资料,年龄和体验相符的所有用户。

我是否必须经历一个循环:

users = []
User.all.each do |user|
  if (user.skills.collect{|s| s.id} & params[:skill_ids] ) > 0
     // skip other  parts
     users << user
  end
end

或者,你们中有谁有更好的解决方案?

2 个答案:

答案 0 :(得分:0)

试试这个:

def springSecurityService
static transients = ['springSecurityService']

答案 1 :(得分:0)

由于您的技能仅属于一个用户,因此您可以首先获取属于所提供技能ID的所有用户,并按其他条件对其进行过滤:

matching_users = User.includes(:skills, :profile)
  .where(["skills.id in (?) AND profile.age = ? AND profile.experience = ?", 
          params[:skill_ids],
          params[:age].to_i, 
          params[:experience].to_i]
        )