Rails仅限两个日期之间的值

时间:2013-09-06 15:54:02

标签: ruby-on-rails scope

我喜欢在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

不幸的是它不起作用。获取所有条目是否有轨道(更美观)?

非常感谢。

1 个答案:

答案 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