我正在测试
下面的小代码 params[:code] = if false
'N'
else
'Y'
end
如果param [:code]传递为true或false,则返回N,而rubucop显示错误文字' false'出现在一个条件。知道为什么吗?
答案 0 :(得分:2)
params[:code] = if false
'N'
else
'Y'
end
此代码只是:
params[:code] = 'Y'
否if
,但不是:false
很好,始终是false
,因此无法联系到N
。这就是rubocop抱怨的原因。
我猜你打算写:
params[:code] = if params[:code] == false
'N'
else
'Y'
end
它根本不是rubyish,但至少它看起来像你的代码,并按照你的期望做到。
测试它:
params = {code: false}
params[:code] = if params[:code] == false
'N'
else
'Y'
end
p params
# {:code=>"N"}
如果您的params
值是字符串(通常是这样),则您必须针对字符串进行测试:
params[:code] = if params[:code] == "false"
'N'
else
'Y'
end
三元:
params[:code] = params[:code] == "false" ? 'N' : 'Y'
或哈希:
params[:code] = {'true' => 'Y', 'false' => 'N'}[params[:code]]
如果您有模糊输入(例如true
或"true"
或"True"
或"yes"
),则可以使用Rails built-in methods to convert to boolean:
code = ActiveRecord::Type::Boolean.new.type_cast_from_database(params[:code]) # For Rails 4.2
params[:code] = code ? 'Y' : 'N'
答案 1 :(得分:1)
你试过这个......
params[:code] ? 'Y' : 'N'
或者
params[:code] = params[:code] ? 'Y' : 'N'
# If you are trying to also re-assign params[:code].