답변:
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
추신 :이 답변은 Harish Shetty의 답변이 저보다 낫기 때문에 수정되었습니다. 내 대답이 받아 들여지기 때문에. 커뮤니티 지원을 위해이 답변을 업데이트했습니다.
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
매우 영리 하지만 Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
. 시간을 조작 할 수있는 방식으로해야 할 요점이 있습니다. 예를 들어, 테스트하는 경우 시간을 조작하고 첫 번째 옵션이 작동하지 않습니다. 디버그 시간이 걸릴 수있는 이러한 종류의 향후 가능한 오류를 방지하려고합니다.
이 질문에 허용 된 답변이 있음을 알고 있습니다. 수락 된 답변에서 제안 된 솔루션은 테이블 크기가 커질 때 성능 문제를 일으킬 수 있습니다.
일반적으로 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
scope
이 게시물 의 예제는 Rails 2 제목 아래에있는 것처럼 보이므로 Rails 3 전용 이라는 것을 명확히하고 싶었습니다 . 레일 2, 당신은 사용해야 할 것 named_scope
보다는 scope
. 또한 Rails 3에서는 def self.today where("created_at >= ?", Time.now.beginning_of_day) end
람다를 무시할 수 있기 때문에이 경우 범위를 사용하는 것보다 더 깨끗한 클래스 메서드 를 동등하게 사용할 수 있습니다.
오늘부터 생성 된 레코드를 조회하려면
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
where('created_at >= now()')
created_at가 미래에 있었던 항목 만 찾습니다.
.lteq(Time.zone.now.end_of_day))
에도 지정해야 합니다.