Ruby on Rails: где определять глобальные константы? - PullRequest
199 голосов
/ 06 ноября 2010

Я только начинаю работу с моим первым веб-приложением Ruby on Rails.У меня есть куча разных моделей, видов, контроллеров и так далее.

Я хочу найти хорошее место для вставки определений действительно глобальных констант, которые применяются ко всему моему приложению.В частности, они применяются как в логике моих моделей, так и в решениях, принимаемых по моим взглядам.Я не могу найти СУХОЕ место для размещения этих определений, где они доступны как для всех моих моделей, так и для всех моих представлений.

Чтобы привести конкретный пример, я хочу постоянную COLOURS = ['white', 'blue', 'black', 'red', 'green'].Это используется повсеместно, и в моделях, и в представлениях.Где я могу определить его в одном месте, чтобы он был доступен?

Что я пробовал:

  • Переменные класса констант в файле model.rb, с которыми они наиболее связаныс, например @@COLOURS = [...].Но я не смог найти вменяемого способа определить его так, чтобы я мог писать в своих представлениях Card.COLOURS, а не что-то хитрое, вроде Card.first.COLOURS.
  • Метод в модели, что-то вроде def colours ['white',...] end -та же проблема.
  • Метод в application_helper.rb - это то, что я делаю до сих пор, но помощники доступны только в представлениях, а не в моделях
  • Думаю, я мог попробоватьчто-то в application.rb или environment.rb, но они на самом деле не кажутся правильными (и, похоже, они тоже не работают)

Нет ли способа определить что-то, что будет доступно какиз моделей и из представлений?Я имею в виду, я знаю, что модели и представления должны быть отдельными, но наверняка в некоторых доменах будут времена, когда им нужно будет ссылаться на одни и те же предметные знания?

Ответы [ 12 ]

0 голосов
/ 03 декабря 2017

В зависимости от вашего состояния, вы также можете определить некоторые переменные окружения и извлечь их через ENV['some-var'] в коде ruby, это решение может не подойти вам, но я надеюсь, что оно может помочь другим.

Пример: вы можете создавать разные файлы .development_env, .production_env, .test_env и загружать их в соответствии с вашими прикладными средами, проверьте этот gen dotenv-rails , который автоматизирует это для вас.

0 голосов
/ 11 апреля 2017

Глобальная переменная должна быть объявлена ​​в config/initializers каталоге

COLOURS = %w(white blue black red green)
...