2012-04-18 6 views
0

연관에 정의 된 클래스 메소드에 다음 코드가있는 경우. 그 값은 캐시되거나 스코프에만 해당할까요? 인스턴스 또는 클래스 메소드에서 Time.zone.now.to_date를 사용 하시겠습니까?

def for_today 
    where 'planned_for = ?', Time.zone.now 
end 

내가 범위와 아래의 할 경우 Time.zone.now 값이 클래스는 캐시 때와 동일합니다 명확히하고 나는이 위의 위해 발생하지 않습니다 있는지 확인하려면 또는 어떻게 해결할 것인가.

scope :for_today, where('planned_for = ?', Time.zone.now) 

그래서

scope :for_today, lambda { where('planned_for = ?', Time.zone.now) } 

내가 클래스 또는 인스턴스 방법과 경우 비슷한 일을해야합니까처럼 람다를 사용하는 것입니다 동적 값을 사용하는 범위를 작성하는 올바른 방법 그게 정확히 뭐야?

답변

1

아니요, 해당 값은 클래스 및 인스턴스 메서드에 대해 캐시되지 않으므로 안전하게 사용할 수 있습니다. 엄지의 규칙으로 : 간단한 조건의 경우 scope을 사용하고 더 복잡한 경우 클래스 방법을 사용하십시오.

또한 데이터베이스에 저장된 모든 시간은 UTC로되어 있으므로 Time.now는 UTC로 자동 변환되므로 사용할 수 있습니다.

+0

우리 데이터베이스가 어리석게도 일부 미국 시간대로 날짜를 저장하고 있지만 걱정할 필요가없는 한 가지. 그러나 나는 그것을 바꿀 예정이다. 저장을 위해 UTC를 제외한 다른 것을 사용할 이유가 없습니다. – mhenrixon

관련 문제