当我想要获取今天创建的所有记录时,我应该如何编写条件语句?
答案 0 :(得分:202)
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
PS:这个答案已被修改,因为Harish Shetty的答案比我的好。我的答案被接受了。我已更新此社区支持的答案
答案 1 :(得分: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))
--------- OR -------------
为模型添加静态方法
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])
--------- OR -------------
将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
答案 2 :(得分: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
答案 3 :(得分:17)
Mohit Jain的答案适用于Rails3
Model.where "DATE(created_at) = DATE(?)", Time.now
答案 4 :(得分:7)
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
这个&#34;名称范围&#34; table_name
的属性。
答案 5 :(得分:5)
model.rb
scope :posted_today, -> { posted_between_period(Time.now.midnight, Time.now.end_of_day) }
posts_controller.rb
Post.posted_today
答案 6 :(得分:5)
Rails 5.1有一个all_day
助手,在这里很有用。
Post.where(created_at: Date.today.all_day)
或
Post.where(created_at: Date.parse("YYYY-MM-DD").all_day)
答案 7 :(得分:1)
出于某种原因,本文中的其他解决方案和StackOverflow上的其他解决方案都没有为我工作(使用Rails 4.2.4和Ruby 2.2.3p173)。这是我可以使用Postgres数据库的唯一查询:
Post.where("created_at >= TIMESTAMP 'now'")
答案 8 :(得分:-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
答案 9 :(得分:-4)
在rails 4.2.3中获取今天创建的记录,使用mysql使用以下内容。
@usergoals = Goal.where(“userid =:userid and Date(created_at)=:date”,{userid:params [:id],date:Date.today})
这里我使用多个条件,如果你想要你可以编辑单个条件。