由于Rails ENV变量应该只有字符串值,因此决定如何将ENV变量用于需要布尔逻辑的用例可能是个问题。例如,因为ENV变量有一个字符串值,并且它总是很简单,所以做这样的事情不会太好:
if ENV['MY_VARIABLE']
# do something
else
# do something else
end
所以至少有两种方法可以完成上述事情:
使用特定值初始化变量并检查它
if ENV['MY_VARIABLE'] == 'some string'
# do something
elsif ENV['MY_VARIABLE'] == 'some other string'
# do something else
end
或者只是使用任何值初始化变量并检查它是否已初始化(代码可能完全符合我们的要求)。
if ENV['MY_VARIABLE']
# do something
else
# do something else
end
问题是哪个选项更受欢迎,以及它们各自的优缺点是什么?
答案 0 :(得分:3)
环境变量顾名思义,是环境相关变量,它根据您所处理的环境(生产,登台,开发)为相同的密钥存储不同的值。
e.g。对于某些具有沙盒模式和生产模式的api,它拥有 Access_Key 。因此,为了使您的代码干燥有效,您需要设置一个环境变量来获取用于开发/登台的沙盒模式的access_key以及用于生产的实时密钥。
你要做的就是使用它们,不像它们被定义的原因,毫无疑问它们可以这样使用。由于它们是常数,我建议做的如下。
在包含
的初始值设定项中创建constants.rb
文件
class Constant
BOOL_CONSTANT = ENV['MY_VARIABLE'].present?
# OR
BOOL_CONSTANT = ENV['MY_VARIABLE'] == 'true'
end
然后你可以随意使用它。通过这种方式,您可以实现您想要的功能。 ;)
答案 1 :(得分:0)
如果您使用Rails 5+,则可以执行ActiveModel::Type::Boolean.new.cast(ENV['MY_VARIABLE'])
。
在Rails 4.2中,使用ActiveRecord::Type::Boolean.new.type_cast_from_user(ENV['MY_VARIABLE'])
。
Documents Rails 5+:https://api.rubyonrails.org/classes/ActiveModel/Type/Boolean.html