2012-04-20 4 views
1

내 응용 프로그램에는 가장 가까운 날짜 이벤트가 기본값 인 하나의 현재 이벤트 만있을 수 있습니다. 이 이벤트를 여러 위치에서 검색해야하며 변경하지 않기 때문에 캐시하는 것이 좋습니다. 나에게 알려진 두 가지 방법이 있습니다.클래스 변수 레일스 모델의 VS 상수

class Event < ActiveRecord::Base 

    CURRENT_EVENT = Event.where('starts_on >= ?', Time.now). 
        order('starts_on ASC').limit(1).first 

    # OR 

    def self.current_event 
    @@current_event ||= Event.where('starts_on >= ?', Time.now). 
         order('starts_on ASC').limit(1).first 
    end 

end 

어느 것이 가장 좋을까요? 또는 다른 대안? @@ 클래스 변수를 쓰는 것은 스레드로부터 안전하지 않기 때문에 권장하지 않습니다.

답변

1

나는 당신이 당신의 접근 방식에 대해 옳지 않다고 생각한다 : 당신의 앱은 캐시 된 값을 영원히 유지할 것이다. 새로운 events은 완전히 영향을 미치지 않습니다. 어떤 이벤트가 이미 통과되었지만 "현재"로 캐시 된 상황 일 수 있습니다.

By 덧붙여 : limit(1).firstfirst과 동일합니다.

1

첫 번째 및 두 번째 방법 모두 올바르지 않습니다. 상수를 정의하면 Event는 Rails 초기화 프로세스 시간에서 실제로 발견됩니다. 두 번째 접근 방식은 cache 레코드가 아닐 것입니다. 나를 위해, 이것은 지방 데이터를 캐싱하지 않습니다.