2011-01-10 3 views
0

내 응용 프로그램에는 많은 상수가 있으므로 이러한 상수에 det_constants.yml이라는 상수 파일을 만들었습니다.상수 문제

이 상수 파일을로드하는 lib 폴더에 constants.rb 파일이 있습니다 나는 그것이,

<%= Constants[:company_type] %> 

그러나 행에 오류

NameError in Vendors#index 
uninitialized constant ActionView::CompiledTemplates::Constants 

가 발생합니다

<%= Constants[:company_type] %> 

할 내보기 파일에서

/lib/constants.rb 

module Constants 
    # Allows accessing config variables from det_constants.yml like so: 
    # Constants[:abc] => xyz 
    def self.[](key) 
    unless @config 
     raw_config = File.read(Rails.root.to_s + "/config/det_constants.yml") 
     @config = YAML.load(raw_config)[Rails.env].symbolize_keys 
    end 
    @config[key] 
    end 

    def self.[]=(key, value) 
    @config[key.to_sym] = value 
    end 
end 

, 나는 같은 일을 할 경우 콘솔에서 올바르게 실행됩니다.

ruby-1.9.2-head > Constants[:company_type] 
=> {"Private"=>1, "Public"=>2} 

어디에 문제가 있는지 알 수 없습니다. Rails 3에서이 작업을 수행하는 새롭고 나은 방법이 있다면 알려주십시오. 나는 당신을 상상

Ruby version: ruby 1.9.2p110 (2010-12-20 revision 30269) [i686-linux] 
Rails version: Rails 3.0.3 

답변

1

이 필요합니다

<% require 'constants' %> 

또한, 당신이 lib/의 변화 다음 서버를 다시 시작해야합니다; 개발 모드에서도 자동으로 인식하지 못합니다.

+0

감사합니다. 그것은 효과가 있었다. –

+0

이것이 최선의 방법인지 알고 싶었습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? –

+0

글쎄, 그건 분명 나쁜 점이 아니야. 나는 당신이 루비 상징을 좋아한다는 것을 본다. 그들은 yaml, ** : thing : 123 **처럼 직접 나타날 수 있습니다. 또한 기호는 구현중인'enum' 디자인 패턴의 필요성을 제한 할 수 있습니다. 'CONSTANTS :: Const1'의 분명한 대안을 고려하십시오. 나는 상수에 대한 오버로드 된 배열 연산자를 좋아하지만, 나는 내 직업에서 SW 아키텍트에게 그것을 사용하는 것을 정당화하고 싶지 않다. :-) 나는 "자기 자신을 사랑한다."[], 이제 나는 그것에 대한 문제를 생각해보고 시도해야만하는 새로운 해결책이있다. :-) – DigitalRoss