반응형
활성 레코드-오늘 이전에 생성 된 레코드 찾기
created_at 필드가 오늘 (날짜)보다 적은 모든 레코드를 얻고 싶습니다. 다음과 같은 것이 있습니까?
MyTable.find_by_created_at(< 2.days.ago)
표준 방식으로 ActiveRecord 사용 :
MyModel.where("created_at < ?", 2.days.ago)
기본 Arel 인터페이스 사용 :
MyModel.where(MyModel.arel_table[:created_at].lt(2.days.ago))
Arel 위에 얇은 레이어 사용 :
MyModel.where(MyModel[:created_at] < 2.days.ago)
squeel 사용 :
MyModel.where { created_at < 2.days.ago }
MyTable
2 일 전까지 생성 된 모든 레코드를 가져 오려면 다음을 수행하십시오 .
MyTable.where(created_at: Date.new..2.days.ago)
당신은 또한 필드의 모든 레코드를 얻을 즉, 유사한 방법으로 미래의 필드를 포함하여 기록도 찾아보실 수 있습니다 MyTable
으로 event_date
지금부터 적어도 이일 :
MyTable.where(event_date: 2.days.from_now..DateTime::Infinity.new)
또 다른 방법은 다음 과 같은 답변 에서 tokland sugensted 와 같은 Arel 인터페이스 MyModel
를 ApplicationRecord
사용 하거나 사용하여 범위를 만드는 것입니다 .
scope :arel, ->(column, predication, *args) { where(arel_table[column].public_send(predication, *args)) }
범위 사용 예 :
MyModel.arel(:created_at, :lt, 2.days.ago)
모든 술어에 대해서는 문서 또는 소스 코드를 확인하십시오 . 이 범위는 where
사슬을 끊지 않습니다 . 이것은 또한 다음을 수행 할 수 있음을 의미합니다.
MyModel.custom_scope1.arel(:created_at, :lt, 2.days.ago).arel(:updated_at, :gt, 2.days.ago).custom_scope2
Time.now는 지금 또는이 순간을 나타냅니다. 따라서 지금 이전에 모든 사용자를 찾으려면
@users = User.all
이것은 지금 이전의 모든 사용자를 찾고 Time.now 이후에 가입하는 향후 사용자 또는 사용자를 제외합니다.
반응형
'programing tip' 카테고리의 다른 글
System V IPC 대 POSIX IPC (0) | 2020.10.17 |
---|---|
역할 및 권한이있는 Spring Security (0) | 2020.10.17 |
모델 속성을 사용하는 ModelSerializer (0) | 2020.10.17 |
중첩 된 try / except 블록에서 예외를 다시 발생시키는 방법은 무엇입니까? (0) | 2020.10.17 |
Putty : 서버 가져 오기에서 키 오류를 거부했습니다. (0) | 2020.10.17 |