2

我有一个用户模型,其中包含本地、Skype 和电话(布尔值,“t”或“f”)和性别(字符串,“男”或“女”)的列。每个用户可以在关联的 SkillMap 模型中拥有许多技能,该模型具有 Skill_id 和方向(字符串,“Teach”或“learn”)

我一直在搞乱 MetaWhere、Squeel 和 RanSack,试图找出哪一个可以让我以最好的、最易读的和最像 rails 的方式搜索这些用户。谁能给我指出最合适的宝石,或者给我一些关于如何构建它的提示?

目前,每次执行搜索时,都会在搜索表中创建一个像下面这样的对象(抱歉格式不好,我不知道如何保存没有这些破折号的数组)

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

因此,在这种情况下,我想找到任何使用 Skype 或本地标志为真的用户(忽略电话 = 'f'),谁的性别标志是“男性”,并且谁有一个相关的技能地图,其中方向 = '教'和技能 ID = 795,并且谁有一个技能图,其中方向 = '学习' 并且技能 ID 在 (789,771,827)

我可以尝试编写 SQL,如果这会使它更清晰,但我只知道如何使用糟糕的子查询来完成它(DBA 可能想跳过这部分)

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))

如果这些字段中的任何一个为空白或错误​​,我不想将它们作为搜索条件包含在内。

无论如何,这是我的问题。感谢您的关注!

干杯,约拿

4

1 回答 1

0

我认为你应该使用像think sphinxelasticsearch这样的搜索引擎。Thinking sphinx 易于使用和设置。

于 2012-03-26T05:40:03.577 回答