2012-05-01 2 views
3

나는 초기화초기화 프로그램을 통해 ActiveRecord :: Base에 범위를 추가 하시겠습니까?

class ActiveRecord::Base   
    scope :this_month, lambda { where(:created_at => Time.now.beginning_of_month..Time.now.end_of_month) } 
end 

그러나 필자는 오류가 "NoMethodError을 통해이 같은 범위를 추가하려고했습니다 : 정의되지 않은 메서드`abstract_class ' 객체 : 클래스 "에 대해 설명합니다. 이 작업을 수행하는 적절한 방법은 무엇입니까?

답변

0

모듈을 통해 수행해야하는 동안 클래스를 재정의하고 있습니다. 당신이

module ActiveRecord 
    class Base 
    scope :this_month, lambda { where(:created_at => Time.now.beginning_of_month..Time.now.end_of_month) } 
    end 
end 
+2

이렇게해도 문제가 해결되지 않았습니다. 같은 오류. – pixelearth

+0

파일의 위치는 물론 실제 이니셜 라이저 코드를 게시하면 도움이됩니다. –

0

가 여기 app/initializer/active_record_scopes_extension.rb 같은 이니셜 라이저에 포함 할 수있는 작업 버전이 created_at 가진 모든 모델에 풀핏 때문에 은 또한이 방법 조금 조심해야한다.

MyModel.created(DateTime.now) 또는 MyModel.updated(3.days.ago)으로 전화하십시오.

module Scopes 
    def self.included(base) 
    base.class_eval do 
     def self.created(date_start, date_end = nil) 
      if date_start && date_end 
      scoped(:conditions => ["#{table_name}.created_at >= ? AND #{table_name}.created_at <= ?", date_start, date_end]) 
      elsif date_start 
      scoped(:conditions => ["#{table_name}.created_at >= ?", date_start]) 
      end 
     end 
     def self.updated(date_start, date_end = nil) 
      if date_start && date_end 
      scoped(:conditions => ["#{table_name}.updated_at >= ? AND #{table_name}.updated_at <= ?", date_start, date_end]) 
      elsif date_start 
      scoped(:conditions => ["#{table_name}.updated_at >= ?", date_start]) 
      end 
     end 
    end 
    end 
end 

ActiveRecord::Base.send(:include, Scopes) 
관련 문제