Я вижу обоих в примерах при проверке того, в каком ENV каждый работает. Что предпочтено? Они, во всех отношениях, равняются?
Согласно документам , # Rails.env
обертывает RAILS_ENV
:
# File vendor/rails/railties/lib/initializer.rb, line 55
def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
Но, посмотрите, в частности, , как он обернут, используя ActiveSupport :: StringInquirer
:
Обертывание строки в этом классе дает более красивый способ проверки на {{1 }} равенство. Значение, возвращаемое Rails.env, заключено в объект StringInquirer, поэтому вместо вызова этого:
Rails.env == "production"
вы можете назвать это:
Rails.env.production?
Таким образом, они не точно эквиваленты, но довольно близки. Я еще не очень много использовал Rails, но я бы сказал, что # Rails.env
, безусловно, является более визуально привлекательным вариантом из-за использования StringInquirer
.
До Rails 2.x предпочтительным способом получения текущей среды было использование константы RAILS_ENV
. Точно так же вы можете использовать RAILS_DEFAULT_LOGGER
, чтобы получить текущий регистратор, или RAILS_ROOT
, чтобы получить путь к корневой папке.
Начиная с Rails 2.x, Rails представил модуль Rails
с некоторыми специальными методами:
Это не t просто косметическое изменение. Модуль Rails предлагает возможности, недоступные при использовании стандартных констант, таких как поддержка StringInquirer
.
Есть также некоторые небольшие отличия. Rails.root
не возвращает простую String
, но возвращает экземпляр Path
.
В любом случае, предпочтительнее использовать модуль Rails
. Константы устарели в Rails 3 и будут удалены в будущем выпуске, возможно, в Rails 3.1.