2017-03-16 85 views
0

我的訂閱模型中有一個名爲expiry_date的列,用於跟蹤訂閱何時到期。我還有一個名爲屬性的hstore列,它具有一個名爲expiry_email_sent的屬性,該屬性用作標誌來確定是否發送了電子郵件。對hstore屬性的Activerecord作用域查詢,檢查屬性是否爲零?

store_accessor :properties, :expiry_email_sent 

我有一個範圍如下,提取在今天和接下來的5天之間有expiry_date的所有記錄。它也只提取那些屬性爲nil的記錄,或者那些expiry_email_sent不存在的記錄。我想添加一個檢查來獲取記錄,如果它存在,expiry_email_sent將爲零。我如何在下面的範圍中添加該內容?

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) } 

回答

1

您可以使用Postgres的功能defined(hstore,text)這意味着

確實hstore包含了主要的非NULL值?

你的範圍應該看起來像

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功能的詳細信息。