2012-03-19 70 views
2

我有一個帶有Local,Skype和Phone(布爾型,'t'或'f')和Gender(字符串,'Male'或'Female')列的用戶模型。 。每個用戶都可以在關聯的SkillMap模型中擁有很多技能,這些技能有skill_id和direction(字符串,「Teach」或「learn」)ruby​​ on rails 3 - 使用gems進行高級搜索

我一直在用MetaWhere,Squeel和RanSack搞砸這將允許我以最好,最可讀和最像導軌的方式搜索這些用戶。任何人都可以指出我最合適的寶石,也許給我一些關於如何建立它的提示?

目前,每一個搜索執行像下面在搜索表中創建的一個對象時(對不起,窮人的格式,我不知道如何保存一個數組沒有那些破折號)

id|user_id|skype|local|phone|teach_skill_ids|learn_skill_ids|gender 
37|628|t|t|f|---- '795'|---- '789'- '771'- '827'|Male 

因此,在這種情況下,我想找到任何Skype用戶或本地用戶標識爲真的用戶(忽略phone ='f'),誰的性別標誌是'Male',誰擁有相關的skill_map,其中direction ='Teach'和skill_id = 795,並且who有一個skill_map,其中direction ='學習'且skill_id爲IN(789,771,827)

我可以在編寫SQL時採取刺探措施更清晰,但我只知道如何使用可怕的子查詢做到這一點(數據庫管理員可能希望跳過這一部分)

SELECT * FROM users 
WHERE gender = 'Male' 
AND (local = 't' OR skype = 't') 
AND id IN 
    (SELECT user_id FROM skill_maps 
    WHERE direction = 'Teach' 
    AND id = 795) 
AND id IN 
    (SELECT user_id from skill_maps 
    WHERE direction = 'Learn' 
    AND id IN (789,771,827)) 

如果這些字段是空的還是假的,我不想將它們包括作爲搜索條件。

無論如何,那是我的問題。謝謝你看看!

乾杯, Yonah的

回答