我的Rail应用中有客户表。在客户表中,一个字段是 customer_expiry_date 。
我想在我的应用程序中添加一个过滤器,这意味着所有过期的客户都符合以下标准:
我应该如何使用where子句编写查询来实现此目的?
我当前的查询如下:
@customers = Customer.where.not(customer_expiry_date: nil)
如何根据我的要求将客户选入三个集合?
@customers_exp_1day = ?
@customers_exp_1week = ?
@customers_exp_1month = ?
答案 0 :(得分:1)
@customers_exp_1day = Customer.where("customer_expiry_date <= ?",
Date.tomorrow)
@customers_exp_1week = Customer.where("customer_expiry_date <= ?",
Date.today + 1.week)
@customers_exp_1month = Customer.where("customer_expiry_date <= ?",
Date.today + 1.month)
您的问题中有“客户”,我在这里使用“客户”,假设您的模型名称实际上是单数。
答案 1 :(得分:1)
只需在模型中编写范围:
class Customer < ActiveRecord::Base
# your code
scope :expired_in, -> (from_now) {
where.not(customer_expiry_date: nil).where('customers."customer_expiry_date" >= ? AND customers."customer_expiry_date" <= ?', Time.now, Time.now + from_now)
}
end
然后使用它:
@customers_exp_1day = Customer.expired_in(1.day)
@customers_exp_1week = Customer.expired_in(1.week)
@customers_exp_1month = Customer.expired_in(1.month)
现在它可以使用最新的更新。