【问题标题】:ruby on rails 3 - advanced searches using gemsruby on rails 3 - 使用 gem 进行高级搜索
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-07-21
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      • 2011-08-18
      • 2012-06-10
      • 2011-12-17
      • 2013-05-29
      • 2015-08-16
      相关资源
      最近更新 更多