我喜欢在Rails中使用范围来仅选择两个日期之间的值。
以下是我的例子:
我的模型的属性为“ startDate ”和“ endDate ”。两者都有“ date ”类型
现在我想从今天开始选择这两个日期之间的每个条目。
我制作的范围看起来像这样。
class Product < ActiveRecord::Base
scope :activeDate, -> { where("? >= ? AND ? <= ?", Time.now.to_date, :saleStartDate, Time.now.to_date, :salesEndDate)}
在控制器中:
@products = Product.activeDate
不幸的是它不起作用。获取所有条目是否有轨道(更美观)?
非常感谢。
答案 0 :(得分:18)
你可以这样做:
scope :activeDate, -> { where("? BETWEEN startDate AND endDate", Time.now.to_date)}
由于您使用的是更大的或相等的 AND更小的或等于,因此您可以使用等效的SQL函数“BETWEEN”。
您无需将时间转换为日期,您可以直接调用Date.today:
scope :activeDate, -> { where("? BETWEEN startDate AND endDate", Date.today)}
您可以通过以下方式改善范围:
scope :activeAtDate, lambda{ |date = Date.today| where("? BETWEEN startDate AND endDate", date) }
并像这样使用它:
Product.activeAtDate() #=> use the Date.today
Product.activeAtDate(1.week.ago.to_date) #=> use Today - minus 7 days