嘿, 如何在rails 3中將範圍設置爲今天的記錄?Howto:今日記錄的模型範圍
這個doent工作,但。我沒有收到任何數據。
class MyModel < ActiveRecord::Base
scope :today, :conditions => { :created_at => Date.today }
end
嘿, 如何在rails 3中將範圍設置爲今天的記錄?Howto:今日記錄的模型範圍
這個doent工作,但。我沒有收到任何數據。
class MyModel < ActiveRecord::Base
scope :today, :conditions => { :created_at => Date.today }
end
由於「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
scope :today, lambda { where(created_on: Date.today) }
Rails的評估在類的級別,所以當你使用範圍:條件=> {:created_at => Date.today}它計算Date.today和比較的預評估日期的所有記錄。要避免這一點LAMDA定義日期或特定時間範圍
scope :today, lambda { :conditions =>[ "created_at = ? ", Date.today] }
我想你可以定義這樣的一般範圍:
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
所以,你可以使用
>> MyModel.today #-> records created today
>> MyModel.created_on(Date.today - 1.week) #-> records created a week ago
從技術上來說,也許應該是'created_at> =? AND created_at <=?',否則你會失去兩秒鐘的時間!另外,在'self.today'中,你需要**上的self.created _ **,而不是''在**'上創建_ **。 – 2011-05-10 11:38:48
我修復'>'和'<' for '> ='和'<=' - 我們不想錯過任何第二;)當然,應該是created_on not created_at - 感謝評論和更正! – santuxus 2011-05-10 15:24:26
IMO這是最容易理解的方式。
def self.created_today
where("created_at >= ? AND created_at < ?", Date.today, Date.tomorrow)
end
我知道這是一個老問題,但仍然可以幫助任何人。
這是我的方式來解決這個問題:
scope :today, -> { where(created_at: DateTime.now.beginning_of_day..DateTime.now.end_of_day) }
不錯,謝謝:) – matiss 2017-09-09 17:38:28
如何告訴軌道(耙)創建僅限日期字段? – fabian 2011-05-10 10:40:04
您只需在表格中添加「created_on」和「update_on」字段。 這些列名是特殊的,所以值將由Rails自動設置。 – BitOfUniverse 2011-05-10 14:05:41
最終範圍: 範圍:今天,拉姆達{ 其中( 「?created_on =」,Date.today) } – fabian 2011-05-10 15:24:26