我試圖創建一個搜索,其中一個記錄必須在另一個表中有多個記錄(通過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