2012-03-19 74 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的

回答