如何获取由rails activerecord创build的logging?

当我想要获得今天创build的所有logging时,应该如何编写条件语句?

9 Solutions collect form web for “如何获取由rails activerecord创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})

在这里我使用多个条件,如果你想你可以编辑单一条件。

  • 通过OmniAuth传递参数
  • Rspec与TestUnit
  • 之前所有vs之前的轨道rspec
  • 无法访问`database.yml`文件中的环境variables
  • ActiveRecord或查询散列符号
  • Rails:update_attribute vs update_attributes
  • 将Rubydate转换为整数
  • Rails迁移has_and_belongs_to_many连接表