【发布时间】:2015-07-07 11:02:54
【问题描述】:
我有一个User 模型
class User < ActiveRecord::Base
has_many :skills
has_one :profile
end
Profile 表有两列命名,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
或者,你们有没有更好的解决方案?
【问题讨论】:
-
你确定是
has_many :skills?不应该是has_and_belongs_to_many :skills吗?否则,无法在 User 实例之间共享技能。 -
是的,
user has_many skills,我知道这有点奇怪。但是这些技能不是预定义的,也不是在其他用户之间共享的。每个用户都有自己的个人技能,不会与其他人分享。
标签: ruby-on-rails postgresql rails-activerecord