今日作成されたすべてのレコードを取得する場合の条件ステートメントはどのように作成すればよいですか?
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
PS:この答えは、Harish Shettyによる答えが私のものよりも優れていたため修正されました。私の答えは受け入れられます。コミュニティサポートのためにこの回答を更新しました
私はこの質問に受け入れられた答えがあることを知っています。受け入れられた回答で提案された解決策は、テーブルサイズが大きくなるとパフォーマンスの問題を引き起こす可能性があります。
通常、created_at
列に基づいてルックアップを実行する場合は、移行ファイルのテーブルにインデックスを追加します。
add_index :posts, :created_at
さて、今日作成されたレコードを検索するには:
レール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
レール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
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
これにより、属性がtable_name
。
Rails 5.1にはall_day
ここで役立つヘルパー。
Post.where(created_at: Date.today.all_day)
または
Post.where(created_at: Date.parse("YYYY-MM-DD").all_day)
model.rb
scope :posted_today, -> { posted_between_period(Time.now.midnight, Time.now.end_of_day) }
posts_controller.rb
Post.posted_today
なんらかの理由で、この投稿の他のソリューションもStackOverflowの他のソリューションも機能しませんでした(Rails 4.2.4およびRuby 2.2.3p173)を使用)。これは、私のPostgresデータベースで作業できる唯一のクエリです。
Post.where("created_at >= TIMESTAMP 'now'")