N. *_*hle 9 scope ruby-on-rails
我喜欢在Rails中有一个范围,用于仅选择两个日期之间的值.
这是我的例子:
我有一个带有' startDate '和' endDate ' 属性的模型.两者都有' 日期 ' 类型
现在我想从今天开始选择每个条目,这是在这两个日期之间.
我做了一个范围看起来像这样.
class Product < ActiveRecord::Base
scope :activeDate, -> { where("? >= ? AND ? <= ?", Time.now.to_date, :saleStartDate, Time.now.to_date, :salesEndDate)}
Run Code Online (Sandbox Code Playgroud)
在控制器中:
@products = Product.activeDate
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用.获得所有条目是否有轨道(更美观)?
非常感谢.
MrY*_*iji 18
你可以这样做:
scope :activeDate, -> { where("? BETWEEN startDate AND endDate", Time.now.to_date)}
Run Code Online (Sandbox Code Playgroud)
由于您使用的是更大或相等的 AND 或更小,您可以使用等效的SQL函数"BETWEEN".
您不需要将时间转换为日期,您可以直接调用Date.today:
scope :activeDate, -> { where("? BETWEEN startDate AND endDate", Date.today)}
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式改善范围:
scope :activeAtDate, lambda{ |date = Date.today| where("? BETWEEN startDate AND endDate", date) }
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
Product.activeAtDate() #=> use the Date.today
Product.activeAtDate(1.week.ago.to_date) #=> use Today - minus 7 days
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8477 次 |
| 最近记录: |