【问题标题】:Rails - Searchlogic to search condition as an array of valueRails - Searchlogic 将条件搜索为值数组
【发布时间】:2010-09-15 07:28:39
【问题描述】:

我有两个模型 EmployeeUnit单位有很多员工。我正在使用 SearchLogic 搜索员工模型。 Searchlogic中下面的SQL相当于什么

employees.unit_id IN (1,2,3)

我都试过了

unit_id_equals_all[] 
unit_id_equals_any[]

但是没有任何效果。有人可以帮忙吗?

谢谢,阿比拉什

【问题讨论】:

    标签: ruby-on-rails rubygems searchlogic


    【解决方案1】:
    Employee.unit_id_equals([1, 2, 3])
    

    【讨论】:

    • 不幸的是,这不起作用。我收到此错误“错误数量的绑定变量(2 比 1)在:employees.unit_id IN (?)”
    • 您能否提供有关错误消息的更多提示?比如消息是什么时候生成的?我不明白为什么有 2 个变量......
    • 在我的搜索视图中,我选择了 2 个单位并将其作为数组传递,如果我选择 5,它将说 5 比 1。我的参数哈希是这样的 --> unit_id_equals"=>["332 ", "333"]
    • 顺便说一句,Employee.unit_id_equals([332,333]) 在控制台中工作正常
    • 是的,这应该可以。你确定你是...equals(["332", "333]) 而不是...equals("332", "333")?后一个给出了相同的错误信息,而前一个是正确的并且工作正常。
    【解决方案2】:

    同样的问题。

    我不知道为什么这对我有用,或者为什么我什至尝试过,因为它没有记录。但是我把 _equals 改成了 _in,它生成了带有 IN 的 SQL,并且运行良好。

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

    【讨论】:

      【解决方案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。调查何时以及为什么会发生这种变化,我发现了这个提交讨论:

      Github commit changing handling of arrays

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-07
        • 2016-12-02
        • 2012-09-16
        • 1970-01-01
        • 2012-04-30
        相关资源
        最近更新 更多