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
어떤 이유로이 게시물의 다른 솔루션이나 StackOverflow의 다른 솔루션이 저에게 효과적이지 않았습니다 (Rails 4.2.4 및 Ruby 2.2.3p173 사용). 이것은 Postgres 데이터베이스로 작업 할 수있는 유일한 쿼리입니다.
Post.where("created_at >= TIMESTAMP 'now'")
오늘부터 생성 된 레코드를 조회하려면
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
오늘 생성 된 레코드를 얻기위한 rails 4.2.3에서는 mysql을 사용하여 다음을 사용합니다.
@usergoals = Goal.where ( "userid = : userid and Date (created_at) = : date", {userid : params [: id], date : Date.today})
여기에서는 단일 조건에 대해 편집 할 수있는 경우 여러 조건을 사용하고 있습니다.
참고URL : https://stackoverflow.com/questions/2919720/how-to-get-record-created-today-by-rails-activerecord
'IT story' 카테고리의 다른 글
WordPress에서 현재 분류 용어 ID를 얻으려면 어떻게해야합니까? (0) | 2020.08.10 |
---|---|
버튼을 클릭 할 때 원형 잔물결을 만드는 방법은 무엇입니까? (0) | 2020.08.10 |
Android 폰에 APK 파일을 설치하는 방법은 무엇입니까? (0) | 2020.08.10 |
최대 길이 UITextField (0) | 2020.08.10 |
CoffeeScript에서 익명 개체 배열 정의 (0) | 2020.08.10 |