这似乎有点简单,但我似乎无法正常工作。我有一个基于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
..
有什么理由吗?我做了一些可笑的傻事吗?
由于
答案 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