if / else not working - Ruby

时间:2015-03-16 15:17:59

标签: ruby

这似乎有点简单,但我似乎无法正常工作。我有一个基于ENV

的简单if / else语句的方法
def auth_credentials
  if ENV['ENVIRONMENT'] == 'testenv1' || 'testenv2' || 'testenv3'
    { key: 'key1', secret: 'secret1' }
  elsif ENV['ENVIRONMENT'] == "testenv4"
    { key: 'key2', secret: 'secret2' }
  else
    raise 'Unable to set key/secret'
  end
end

所以在我的控制台中输入ENV['ENVIRONMENT']并返回testenv4。然而,当我然后尝试获取相关的密钥

auth_credentials[:key]

我按预期退回key1而不是key2 ..

有什么理由吗?我做了一些可笑的傻事吗?

由于

2 个答案:

答案 0 :(得分:6)

这一行:

ENV['ENVIRONMENT'] == 'testenv1' || 'testenv2' || 'testenv3'

相当于:

(ENV['ENVIRONMENT'] == 'testenv1') || 'testenv2' || 'testenv3'

因此它始终返回true'testenv2',这两者都是真实的。

相反,你应该:

if %w(testenv1 testenv2 testenv3).include? ENV['ENVIRONMENT']

答案 1 :(得分:3)

每个比较需要分开,例如

if (ENV['ENVIRONMENT'] == 'testenv1') || (ENV['ENVIRONMENT'] == 'testenv2') || (ENV['ENVIRONMENT'] == 'testenv3')

你可能想要使用case,例如,

case ENV['ENVIRONMENT']
when 'testenv1', 'testenv2', 'testenv3'
  # Do this
else
  # Do that
end

(或Marek'} include的想法。)

我赞成再迈出一步;将逻辑注入交际方法,例如,

if test_environment?
  # Do this
elsif super_secrect_test_environment?
  # Do that
else
  # Do the other thing
end