我有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
或者,你们中有谁有更好的解决方案?
答案 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]
)