Проблема с константами - PullRequest
0 голосов
/ 10 января 2011

В моем приложении много констант, поэтому я создал файл констант с именем det_constants.yml для этих констант.

/config/det_constants.yml

DEFAULTS: &DEFAULTS
    company_type:  { "Private"                     : 1,
                     "Public"                      : 2  }
development:
  <<: *DEFAULTS

test:
  <<: *DEFAULTS

production:
  <<: *DEFAULTS

У меня есть файл constants.rb в папке lib, который загружает эту константуфайл.

/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

В моем файле просмотра, когда я делаю

<%= Constants[:company_type] %>

, он выдает ошибку

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

в строке

<%= Constants[:company_type] %>

Однако, если я делаю то же самое в консоли, она работает правильно,

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

Ответы [ 2 ]

1 голос
/ 10 января 2011

Я полагаю, вам нужно:

<% require 'constants' %>

Кроме того, вам потребуется перезагрузить сервер после изменений в lib/;он не ловит их автоматически даже в режиме разработки.

0 голосов
/ 10 января 2011

Что касается других решений, я рекомендую вам посмотреть Railscast под названием Файл конфигурации YAML .Есть также некоторые драгоценные камни, такие как Settingslogic , чтобы помочь вам с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...