如何获取由rails activerecord创build的logging?
当我想要获得今天创build的所有logging时,应该如何编写条件语句?
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
PS:这个答案已经被修改了,Harish Shetty的回答比我的好。 因为我的答案被接受了。 我已经更新了这个社区支持的答案
我知道这个问题有一个被接受的答案。 在接受的答案中build议的解决scheme可能会导致表大小增长时的性能问题。
通常,如果您基于created_at
列执行查找,请在迁移文件的表中添加索引。
add_index :posts, :created_at
现在,查找今天创build的logging:
导轨3/4
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
查找在特定date创build的post。
Post.where(:created_at => (date.beginning_of_day..date.end_of_day))
——— 或者 ————-
向你的模型添加一个静态方法
class Post < ActiveRecord::Base def self.today where("created_at >= ?", Time.zone.now.beginning_of_day) end end Post.today #returns posts today
Rails 2
Post.all(:conditions => ["created_at >= ?", Time.zone.now.beginning_of_day])
——— 或者 ————-
将一个named_scope添加到您的模型
class Post < ActiveRecord::Base named_scope :today, lambda { { :conditions => ["created_at >= ?", Time.zone.now.beginning_of_day] } } end Post.today #returns posts today
MySQL的:
Model.all :condition => ["DATE(created_at) = ?", Date.today] # rails 2 Model.where("DATE(created_at) = ?", Date.today) # rails 3
PostgreSQL的:
Model.all :condition => ["created_at::date = ?", Date.today] # rails 2 Model.where("created_at::date = ?", Date.today) # rails 3
Mohit Jain的答案适用于Rails3
Model.where "DATE(created_at) = DATE(?)", Time.now
model.rb
scope :posted_today, -> { posted_between_period(Time.now.midnight, Time.now.end_of_day) }
posts_controller.rb
Post.posted_today
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
这个“namecopes”与table_name
的属性。
出于某种原因,本文中的其他解决scheme以及StackOverflow中的其他解决scheme都不适用于我(使用Rails 4.2.4和Ruby 2.2.3p173)。 这是我可以使用我的Postgres数据库的唯一查询:
Post.where("created_at >= TIMESTAMP 'now'")
查询从今天创build的logging
使用范围与arel
class Post < ActiveRecord::Base scope :create_from_today, -> { where(arel_table[:created_at].gteq(Time.zone.now.beginning_of_day)) } end
使用范围与原始查询
class Post < ActiveRecord::Base scope :create_from_today, -> { where('created_at >= now()') } end
那我们可以使用它
today_posts = Post.created_from_today
在导轨4.2.3获取今天创build的logging,使用mysql使用以下。
@usergoals = Goal.where(“userid =:userid and Date(created_at)=:date”,{userid:params [:id],date:Date.today})
在这里我使用多个条件,如果你想你可以编辑单一条件。