2014-11-04 1 views
0

나는 Rails를 사용하여 프로젝트를 진행 중이며 클래스 및 인스턴스 메소드에서 특정 코드를 호출해야한다. 두 클래스/인스턴스 메서드에서 중복 된 코드로 지금 다음을 수행하고 있습니다. 이것을 작성하는 더 좋은 방법이 있습니까? -Ruby : 인스턴스 및 클래스 메소드에서 코드 재사용

module OrderHelper 

    extend ActiveSupport::Concern 

    def min_days_to_ship 
    #to keep it simple, but has other code/logic 
    3 
    end 

    module ClassMethods 
     def self.min_days_to_ship 
     #to keep it simple, but has other code/logic 
     3 
     end 
    end 
end 


class Order < ActiveRecord::Base 

    include OrderHelper 

    self.earliest_available 
    Date.today + OrderHelper::ClassMethods.min_days_to_ship 
    end 


    delivery_after_date 
    self.ordered_date + min_days_to_ship 
    end 

end 

고마워요!

답변

1

인스턴스와 클래스 방법 min_days_to_ship가 동일한 경우, 단지 ClassMethods 모듈을 삭제하고 Object#extend를 참조

extend OrderHelper 

include OrderHelper. 

후 추가합니다. 모듈 include D 인 때마다 클래스 인스턴스 및 방법 모두로 min_days_to_ship 원한다면

후크 Module#included 사용

def self.included(klass) 
    klass.extend self 
end 

가진 모듈을 대체 ClassMethods. 이 경우 Orderextend OrderHelper을 입력 할 필요가 없습니다.

+0

완벽하게 작동합니다! Cary에게 감사드립니다. –

관련 문제