web-dev-qa-db-ja.com

Rails activerecordによって今日作成されたレコードを取得する方法?

今日作成されたすべてのレコードを取得する場合の条件ステートメントはどのように作成すればよいですか?

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

PS:この答えは、Harish Shettyによる答えが私のものよりも優れていたため修正されました。私の答えは受け入れられます。コミュニティサポートのためにこの回答を更新しました

204
Mohit Jain

私はこの質問に受け入れられた答えがあることを知っています。受け入れられた回答で提案された解決策は、テーブルサイズが大きくなるとパフォーマンスの問題を引き起こす可能性があります。

通常、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
119
Harish Shetty

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
29
jigfox

Mohit Jainの回答はRails3に適合

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

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

これにより、属性がtable_name

7
Rafael Oliveira

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
StevenClontz

model.rb

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

posts_controller.rb

Post.posted_today
5
Parthiv

なんらかの理由で、この投稿の他のソリューションもStackOverflowの他のソリューションも機能しませんでした(Rails 4.2.4およびRuby 2.2.3p173)を使用)。これは、私のPostgresデータベースで作業できる唯一のクエリです。

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