fab*_*ian 11 ruby ruby-on-rails ruby-on-rails-3
嘿,如何在rails 3中设置范围到今天的记录?
这个功能尚未完成.我没有数据.
class MyModel < ActiveRecord::Base
scope :today, :conditions => { :created_at => Date.today }
end
Run Code Online (Sandbox Code Playgroud)
Bit*_*rse 23
由于"created_at"列包含日期和时间,但您只需比较日期,您有两种方式(我假设您使用MySQL):
scope :today, lambda { WHERE("created_at BETWEEN '#{DateTime.now.beginning_of_day}' AND '#{DateTime.now.end_of_day}'") }scope :today, lambda { WHERE('DATE(created_at) = ?', Date.today)}此外,您可以将"created_on"列添加到仅包含日期的表中.
更新:
def self.up
add_column table_name, :created_on, :date
add_column table_name, :updated_on, :date
end
Run Code Online (Sandbox Code Playgroud)
scope :today, lambda { where(created_on: Date.today) }
san*_*xus 16
我认为您可以定义这样的一般范围:
class MyModel < ActiveRecord::Base
scope :created_on, lambda {|date| {:conditions => ['created_at >= ? AND created_at <= ?', date.beginning_of_day, date.end_of_day]}}
def self.today
self.created_on(Date.today)
end
end
Run Code Online (Sandbox Code Playgroud)
所以你可以使用
>> MyModel.today #-> records created today
>> MyModel.created_on(Date.today - 1.week) #-> records created a week ago
Run Code Online (Sandbox Code Playgroud)
Rails在类级别评估范围,因此当您使用:conditions => {:created_at => Date.today}时,它会评估Date.today并将所有记录与预评估日期进行比较.为避免这种情况,请使用lamda来定义日期或时间特定范围
scope :today, lambda { :conditions =>[ "created_at = ? ", Date.today] }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12964 次 |
| 最近记录: |