【问题标题】:How to search through array of strings using BETWEEN in Active Record POSTGRES,如何在 Active Record POSTGRES 中使用 BETWEEN 搜索字符串数组,
【发布时间】:2017-04-07 15:19:07
【问题描述】:
Subscriptions
    canceled_at: ["2017-04-07T09:52:17-05:00", "2017-04-01T09:52:17-05:00"]

Canceled_at 是一个字符串数组。每个元素都是一个转换为字符串的 DateTime。

上面是我的订阅表。我正在尝试查询并查找在给定一周内具有 cancelled_at 日期的记录。

date = Date.today

Subscription.where("ANY subscriptions.canceled_at 
    BETWEEN '#{date.beginning_of_week(:sunday)}' 
    AND '#{date.end_of_week(:sunday)}'"

红宝石 2.3.1p112

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord ruby-on-rails-5


    【解决方案1】:
    Subscription.where(canceled_at:(date.beginning_of_week(:sunday)..date.end_of_week(:sunday)))
    

    编辑:缺少右括号

    【讨论】:

    • 这会收到一个错误,因为 cancelled_at 是一个日期数组。
    • 在您的订阅表中的列中没有被取消?代码缺少最后一个括号。
    • 是的,它是子表上的一列。然而,它是一个数组。以上返回错误 ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR: malformed array literal: "2017-04-09" DETAIL: Array value must start with "{" or dimension information.
    • 哦。有些时候很难说。它是序列化的,数组保存为字符串吗?我不建议这样做,您可以多次取消订阅而没有迹象表明它已被重新激活吗?但是,如果您显示数据结构的更多细节,仍然可以获取数据,但是如果您有很多记录,它的性能会很差。
    • 订阅可以多次取消并重新激活。重新激活日期对我来说不太重要。我主要只是想跟踪并查看在给定的一周内是否取消了此订阅。 cancelled_at: 列是一个日期时间数组,表示为字符串。如果给定的日期在范围内,你还能拉吗?
    猜你喜欢
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2012-12-07
    • 2017-06-04
    • 1970-01-01
    • 2011-07-22
    相关资源
    最近更新 更多