带有Rails ENV变量的布尔逻辑

时间:2017-05-05 10:07:51

标签: ruby-on-rails ruby

由于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

问题是哪个选项更受欢迎,以及它们各自的优缺点是什么?

2 个答案:

答案 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