【发布时间】:2012-04-03 13:52:14
【问题描述】:
我有一个用户模型,其中包含本地、Skype 和电话(布尔值,“t”或“f”)和性别(字符串,“男”或“女”)列。每个用户可以在关联的 SkillMap 模型中拥有许多技能,该模型具有 Skill_id 和 direction(字符串,“Teach”或“learn”)
我一直在搞乱 MetaWhere、Squeel 和 RanSack,试图找出哪些可以让我以最好的、最易读的和最类似于 rails 的方式搜索这些用户。谁能给我指出最合适的 gem,或者给我一些关于如何构建它的提示?
目前,每次执行搜索时,都会在搜索表中创建一个如下所示的对象(抱歉格式不佳,我不知道如何保存没有这些破折号的数组)
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')、性别标志为“男性”以及具有相关技能映射的用户,其中方向 = 'Teach'并且 Skill_id= 795,并且他们有一个 Skill_map,其中方向 = 'Learn' 并且 Skill_id 是 IN (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))
如果这些字段中的任何一个为空白或错误,我不想将它们作为搜索条件。
无论如何,这是我的问题。感谢您的观看!
干杯, 约拿
【问题讨论】:
标签: ruby-on-rails search squeel meta-where ransack