关联模型中的查询优化
Query optimization in associated models
我有一个User
模型
class User < ActiveRecord::Base
has_many :skills
has_one :profile
end
Profile
table 有两列命名为 age
& 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
或者,你们有更好的解决方案吗?
试试这个:
@users = User.includes(:skills).where(["skills.id in (?)", params[:skill_ids]]).all
因为您的技能只属于一个用户,您可以先获取属于提供的技能 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]
)
我有一个User
模型
class User < ActiveRecord::Base
has_many :skills
has_one :profile
end
Profile
table 有两列命名为 age
& 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
或者,你们有更好的解决方案吗?
试试这个:
@users = User.includes(:skills).where(["skills.id in (?)", params[:skill_ids]]).all
因为您的技能只属于一个用户,您可以先获取属于提供的技能 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]
)