[ruby-on-rails] Rails ActiveRecord에서 오늘 만든 레코드를 얻는 방법은 무엇입니까?

오늘 작성된 모든 레코드를 얻으려면 조건문을 어떻게 작성해야합니까?



답변

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

추신 :이 답변은 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


답변

Rails3에 적합한 Mohit Jain의 답변

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


답변

Rails 5.1에는 all_day여기에 유용한 도우미가 있습니다.

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

또는

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


답변

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) }

posts_controller.rb

Post.posted_today