2011-11-04 7 views
0

필자는 일부 모델 (예 : 매직 넘버)에 상수가 정의 된 비교적 큰 Rails 애플리케이션 (198 개 모델)을 보유하고 있습니다. 이러한 상수는 때때로 다른 모델에서 클래스 정의의 일부로 참조됩니다.모델은 두 번 이상 필요합니까?

인위적인 예 :

class Employee < ActiveRecord::Base 
    TYPES = [ 1234, 5678 ] 
end 

class CommissionType < ActiveRecord::Base 
    validates :employee_type, :inclusion => { :in => Employee::TYPES } 
end 

응용 프로그램이로드, 우리는 같은 경고 메시지를받을 때 :

employee.rb:2: warning: already initialized constant TYPES 

나는 그것이 표시로 employee.rb 파일이며,이 원인을 모르는 두 번로드되므로 클래스가 두 번 정의됩니다. 또한 두 가지를 모두 두 번 정의하여 Ruby에서 두 배의 메모리를 사용합니까?

나는 모델이 명시 적으로 서로를 요구하지 않는다는 것을 확인했다. 이 상수를 이니셜 라이저로 옮길 수는 있지만 모델을 여러 번 정의하면 문제가있는 것 같습니다.

이 문제가 발생합니까? 아니면 그냥 무시하고 상수를 이니셜 라이저로 이동해야합니까?

난 당신이 TYPES에게 자기를 만들기 위해 당신이 할 수있는

:in => Employee.TYPES 

을 단지 수도 있겠죠 3.0.10

+0

'TYPES'을 배열을 반환하는 메소드로 변경하십시오. 그런 다음 메서드에서 TYPES() ''에'puts'을 수행 한 다음'TYPES' 배열을 반환합니다. 무슨 일이 일어나는지보십시오. 나는 방법이 상수와 같은 이름을 가질 수 있는지 궁금하다. – Zabba

답변

관련 문제