Activerecord 范围查询 hstore 属性,检查属性是否为 nil?

Activerecord scope query on hstore attributes, check if attribute is nil?

我的订阅模型中有一个名为 expiry_date 的列,用于跟踪订阅何时到期。我还有一个名为 properties 的 hstore 列,它有一个名为 expiry_email_sent 的属性,用作确定是否已发送电子邮件的标志。

store_accessor :properties, :expiry_email_sent

我有如下范围来提取今天和接下来 5 天之间具有 expiry_date 的所有记录。它还只获取那些属性为 nil 的记录,或者那些 expiry_email_sent 不存在的记录。我想添加一个检查以获取 expiry_email_sent 如果存在则为 nil 的记录。我将如何在下面的范围内添加它?

scope :expiry_soon_email, -> { where("expiry_date >= ? AND expiry_date <= ? AND (properties IS NULL OR EXIST(properties, 'expiry_email_sent') = FALSE", Time.zone.now.to_date, Time.zone.now.to_date + 5.days) }

您可以使用 Postgres 函数 defined(hstore,text) 这意味着

does hstore contain non-NULL value for key?

你的范围应该看起来像

scope :expiry_soon_email, -> { where("expiry_date >= ? AND expiry_date <= ? AND (properties IS NULL OR DEFINED(properties, 'expiry_email_sent') = FALSE", Time.zone.now.to_date, Time.zone.now.to_date + 5.days) }

Postgres documentation 中查看有关 hstore 函数的详细信息。