[英]Rails - Searchlogic to search condition as an array of value
我有两个模型Employee和Unit 。 单位有很多员工 。 我正在使用SearchLogic搜索员工模型。 在Searchlogic中等效于以下SQL
employees.unit_id IN (1,2,3)
我都尝试过
unit_id_equals_all[]
unit_id_equals_any[]
但是什么都行不通。 有人可以帮忙吗?
谢谢阿比拉什
Employee.unit_id_equals([1, 2, 3])
这里同样的问题。
我不知道为什么这对我有用,或者为什么我尝试过,因为它没有记录。 但是我将_equals更改为_in,它使用IN生成了SQL,并且运行良好。
Employee.unit_id_in([1, 2, 3])
我们在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。 调查何时以及为什么可能发生此更改,我发现了此提交讨论:
此更改和讨论的结果是,当您想与数组中的任何值进行匹配时,要求_any多次,否则只需将数组直接传递给equals语句,而无需将SQL更改为“ IN”即可值。
恢复到2.4.7可以清除错误。 为了避免弃用错误,我们最终将所有调用更改为更明确的_any或_in。 希望这会有所帮助并增加到上面非常有用的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.