Где лучшее место для определения константы в приложении Ruby on Rails? - PullRequest
44 голосов
/ 10 июля 2009

Где в приложении Ruby on Rails лучше всего определить константу?

У меня есть массив постоянных данных, которые мне нужны на всех контроллерах моего приложения.

Ответы [ 2 ]

64 голосов
/ 10 июля 2009

Rails> = 3, приложение само является модулем (живет в config/application.rb). Вы можете хранить их в модуле приложения

module MyApplication
  SUPER_SECRET_TOKEN = "123456"
end

Затем используйте MyApplication::SUPER_SECRET_TOKEN для ссылки на константу.


Rails> = 2.1 && <3 вы должны разместить их </p>

  1. в /config/initializers, когда константа имеет область применения
  2. когда константа относится к конкретной модели / контроллеру / помощнику, вы можете включить ее в сам класс / модуль

До поддержки Rails 2.1 и initializers программисты использовались для помещения констант приложения в environment.rb.

Вот несколько примеров

# config/initializers/constants.rb
SUPER_SECRET_TOKEN = "123456"

# helpers/application_helper.rb
module ApplicationHelper
  THUMBNAIL_SIZE= "100x20"

  def thumbnail_tag(source, options = {})
    image_tag(source, options.merge(:size => THUMBNAIL_SIZE)
  end

end
10 голосов
/ 10 июля 2009

Вы можете разместить их в config / environment.rb:

Rails::Initializer.run do |config|
    ...
    SITE_NAME = 'example.com'
end

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

EDIT:

лучший ответ - лучший ответ.

Сохраните ваши константы в файле в config / initializers / *. Rb

...