如何通过rails activerecord获取今天创建的记录?

问题描述 投票:105回答:10

当我想要获取今天创建的所有记录时,我应该如何编写条件语句?

ruby-on-rails date rails-activerecord
10个回答
202
投票
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)

PS:这个答案已被修改为Harish Shetty的答案比我的好。我的答案被接受了。我已更新此答案以获得社区支持


-4
投票

在rails 4.2.3中获取今天创建的记录,使用mysql使用以下内容。

@usergoals = Goal.where(“userid =:userid and Date(created_at)=:date”,{userid:params [:id],date:Date.today})

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


118
投票

我知道这个问题有一个公认的答案。在表格大小增加时,在接受的答案中建议的解决方案可能会导致性能问题。

通常,如果基于created_at列执行查找,请在迁移文件中的表上添加索引。

add_index :posts, :created_at

现在,查找今天创建的记录:

Rails 3/4

Post.where("created_at >= ?", Time.zone.now.beginning_of_day)

查找在特定日期创建的帖子。

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

29
投票

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

17
投票

Mohit Jain的答案适用于Rails3

Model.where "DATE(created_at) = DATE(?)", Time.now

7
投票

Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)

这个“名称范围”与table_name的属性。


6
投票

Rails 5.1有一个all_day助手,在这里很有用。

Post.where(created_at: Date.today.all_day)

要么

Post.where(created_at: Date.parse("YYYY-MM-DD").all_day)

5
投票

model.rb

scope :posted_today, -> { posted_between_period(Time.now.midnight, Time.now.end_of_day) }

posts_controller.rb

Post.posted_today

1
投票

出于某种原因,本文中的其他解决方案和StackOverflow上的其他解决方案都没有为我工作(使用Rails 4.2.4和Ruby 2.2.3p173)。这是我可以使用Postgres数据库的唯一查询:

Post.where("created_at >= TIMESTAMP 'now'")

-1
投票

查询从今天创建的记录

使用范围与arel

class Post < ActiveRecord::Base    
  scope :create_from_today, -> {
    where(arel_table[:created_at].gteq(Time.zone.now.beginning_of_day))
  }
end

然后我们可以使用它

today_posts = Post.created_from_today
© www.soinside.com 2019 - 2024. All rights reserved.