Rails - Searchlogic将条件搜索为值数组

时间:2010-09-15 07:28:39

标签: ruby-on-rails rubygems searchlogic

我有两个模型员工&的单元即可。 单位有许多员工。我正在使用SearchLogic搜索员工模型。在Searchlogic

中等效于以下SQL
employees.unit_id IN (1,2,3)

我试过了两次

unit_id_equals_all[] 
unit_id_equals_any[]

但没有任何作用。有人可以帮忙吗?

谢谢,Abhilash

3 个答案:

答案 0 :(得分:1)

Employee.unit_id_equals([1, 2, 3])

答案 1 :(得分:1)

这里也有同样的问题。

我不知道为什么这对我有效,或者为什么我甚至尝试过它,因为它没有记录。但我将_equals更改为_in,它用IN生成了SQL,并且工作得很好。

Employee.unit_id_in([1, 2, 3])

答案 2 :(得分:1)

我们在Rails 2.3.12项目中遇到了同样的问题。使用searchlogic 2.4.7我们可以做到:

User.id_equals([1,2,3])

升级到搜索逻辑2.5.8后(旧版本中的弃用消息混乱了黄瓜和规格输出),此语法不再有效。它像上面那样抛出了这个错误:

ActiveRecord::StatementInvalid: Mysql::Error: Operand should contain 1 column(s): SELECT * FROM `users` WHERE (users.id = 1, 2, 3) 

在尝试上述解决方案后,我们发现这两种语法替代方案有效:

User.id_in([1,2,3]) <-- as suggested above
User.id_equals_any([1,2,3])

换句话说,如果没有“_any”,新的搜索逻辑会产生无效的mysql。看看这个改变发生的时间和原因,我发现了这个提交讨论:

Github commit changing handling of arrays

这个变化和讨论的结果是当你想要匹配数组中的任何值时,需要_any,否则只需将数组直接传递给equals语句而不将SQL更改为“IN”需要多个值。

恢复到2.4.7可清除错误。将所有调用更改为更明确的_any或_in是我们最终要做的,以避免弃用错误。希望这有助于并增加上面非常有用的答案。