我试图创建一个搜索,其中一个记录必须在另一个表中有多个记录(通过id和has_many
语句链接)才能成为作为结果包括在内。Ruby on Rails:搜索一个表必须在另一个表中存在多行
我有表users
,skill_lists
,skill_maps
。
用户通过skill_maps
表中的单个条目映射到个人技能。许多用户可以共享单个技能,单个用户可以通过skill_maps
表中的多个条目拥有许多技能。
例如
User_id | Skill_list_id
2 | 9
2 | 15
3 | 9
用户2有技能9和15
用户3有9
我试图创建一个返回其具有一套技能的所有用户的哈希搜索唯一的技能。所需的一组skill_ids
在参数中显示为一个数组。
下面是我使用的代码:
skill_selection_user_ids = SkillMap.find_all_by_skill_list_id(params[:skill_ids]).map(&:user_id)
@results = User.find(:all, :conditions => {:id => skill_selection_user_ids})
的问题是,它返回有这些技能不是具有其全部用户的所有用户。
而且,我的用户表链接到skill_lists表:through => :skill_maps
,反之亦然,这样我可以调用@user.skill_list
等等
我敢肯定,这是一个真正的新手问题,我完全新轨道(和编程)。我搜索并寻找解决方案,但找不到任何东西。我真的不知道如何在单个搜索词中解释这个问题。
它的工作原理!非常感谢! 我必须先添加一个.to_a,然后才能通过这个新列表搜索我的用户表。这里是我的最终代码: 'skill_selection_user_ids = params [:teach_skill_ids] .map {| s | Set.new(SkillMap.find_all_by_skill_list_id(s).map(&:user_id))} .reduce(:&) @results = User.find(:all,:conditions => {:id => skill_selection_user_ids.to_a} )' 再次感谢! – joshblour 2012-02-10 22:11:26
你可以这样做:'@results = User.find skill_selection_user_ids.entries'。 '条目'将集合转换为一个数组,您只需将其提供给'查找'。 – dynex 2012-02-11 00:27:22
也工作过,谢谢@dynex! – joshblour 2012-02-11 21:36:57