【问题标题】:Selecting rows where array elements in Array Rails ActiveRecord/SQL在 Array Rails ActiveRecord/SQL 中选择数组元素所在的行
【发布时间】:2014-07-22 05:47:33
【问题描述】:

在 Rails 4/Ruby 2.1 中,我正在尝试做这样的事情:

@user.submissions.where(:submission_codes_array => valid_submission_codes_array).count

有点类似于当您想查看:id if 是否在可能值的数组中(即.where(:id => valid_ids),除了在这种情况下检查特定属性(它是一个 postgres 数组类型)是否包含任何值在可能值集合内的值,在这种情况下,它会被计算在内。

有什么想法吗?

【问题讨论】:

    标签: sql ruby-on-rails ruby arrays postgresql


    【解决方案1】:

    AFAIK,你不能通过 ActiveRecord 来做到这一点,因为你使用的是 Postgres-only 功能(也就是我不认为 mysql 支持你需要的功能)。

    你想要的可以在这里找到:http://www.postgresql.org/docs/8.2/static/functions-array.html

    具体来说,您最终会得到类似Model.where("submission_codes_array && ?", valid_submission_codes_array.to_s.gsub('"',"'")) 的内容。如果我正确阅读文档,&& 运算符将检查两个数组之间的重叠(也称为设置交集)。

    请注意,可惜的是,ActiveRecord 不会将数组序列化为 Postgres 喜欢的形式,因此您需要稍微调整一下。

    【讨论】:

    • 太棒了,让它可以正常工作。最初遇到一些问题,因为我正在这样做:Model.where("submission_codes_array && ?", [1,5,2].to_s)。但似乎您传入的第二个数组需要具有正确的 Postgres 数组格式。所以这样的事情奏效了:Model.where("submission_codes_array && ?", '{1,5,2}'").
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多