Vic*_*Lam 105 ruby-on-rails date rails-activerecord
当我想要获取今天创建的所有记录时,我应该如何编写条件语句?
Moh*_*ain 207
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
Run Code Online (Sandbox Code Playgroud)
PS:这个答案已被修改为Harish Shetty的答案比我的好.我的答案被接受了.我已更新此答案以获得社区支持
Har*_*tty 119
我知道这个问题有一个公认的答案.在表格大小增加时,在接受的答案中建议的解决方案可能会导致性能问题.
通常,如果基于created_at列执行查找,请在迁移文件中的表上添加索引.
add_index :posts, :created_at
Run Code Online (Sandbox Code Playgroud)
现在,查找今天创建的记录:
Rails 3/4
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
Run Code Online (Sandbox Code Playgroud)
查找在特定日期创建的帖子.
Post.where(:created_at => (date.beginning_of_day..date.end_of_day))
Run Code Online (Sandbox Code Playgroud)
--------- 或 -------------
向模型添加静态方法
class Post < ActiveRecord::Base
def self.today
where("created_at >= ?", Time.zone.now.beginning_of_day)
end
end
Post.today #returns posts today
Run Code Online (Sandbox Code Playgroud)
Rails 2
Post.all(:conditions => ["created_at >= ?", Time.zone.now.beginning_of_day])
Run Code Online (Sandbox Code Playgroud)
--------- 或 -------------
将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
Run Code Online (Sandbox Code Playgroud)
jig*_*fox 29
MySQL的:
Model.all :condition => ["DATE(created_at) = ?", Date.today] # rails 2
Model.where("DATE(created_at) = ?", Date.today) # rails 3
Run Code Online (Sandbox Code Playgroud)
PostgreSQL的:
Model.all :condition => ["created_at::date = ?", Date.today] # rails 2
Model.where("created_at::date = ?", Date.today) # rails 3
Run Code Online (Sandbox Code Playgroud)
the*_*fme 18
Mohit Jain的答案适用于Rails3
Model.where "DATE(created_at) = DATE(?)", Time.now
Run Code Online (Sandbox Code Playgroud)
Rails 5.1有一个all_day在这里有用的助手。
Post.where(created_at: Date.today.all_day)
Run Code Online (Sandbox Code Playgroud)
要么
Post.where(created_at: Date.parse("YYYY-MM-DD").all_day)
Run Code Online (Sandbox Code Playgroud)
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
这个"名称范围"的属性与table_name.
model.rb
scope :posted_today, -> { posted_between_period(Time.now.midnight, Time.now.end_of_day) }
Run Code Online (Sandbox Code Playgroud)
posts_controller.rb
Post.posted_today
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70068 次 |
| 最近记录: |