Chr*_*s B 26 activerecord ruby-on-rails deprecated ruby-on-rails-3.2
ActiveRecord::ConnectionAdapters::Column.value_to_boolean在轨道3.2中是否有"酷孩子认可"的替代品?
Joh*_*gle 101
在Rails 4.2中,这看起来像是一种可行的方法:
ActiveRecord::Type::Boolean.new.type_cast_from_database(value)
Run Code Online (Sandbox Code Playgroud)
其中有哪些内容将会这样做
if value == ''
nil
else
ConnectionAdapters::Column::TRUE_VALUES.include?(value)
end
Run Code Online (Sandbox Code Playgroud)
或者在Rails 5中:
ActiveRecord::Type::Boolean.new.cast(value)
Run Code Online (Sandbox Code Playgroud)
这似乎最终在这里:
def cast_value(value)
if value == ''
nil
else
!FALSE_VALUES.include?(value)
end
end
Run Code Online (Sandbox Code Playgroud)
iai*_*ain 11
正如jokklan在评论中提到的,答案取决于你想用它做什么?你想接受各种字符串并将它们变成真正的布尔值吗?或者你也控制提交结束,你可以更严格吗?
从严格到更加神奇:
双重爆炸方法将任何对象转换为真实的布尔值.第一个爆炸把它变成了它的反面,第二个变成了它的正确布尔值.
基本上,nil并且false将成为false,一切将变得true.
!!nil # => false
!!false # => false
!!0 # => true
!!true # => true
!!"" # => true
!!"false" # => true
!![] # => true
Run Code Online (Sandbox Code Playgroud)
适合导出到json,但在Ruby中保存时并不需要.
从ActiveSupport和相反的blank?:
nil.present? # => false
false.present? # => false
0.present? # => true
"false".present? # => true
"".present? # => false
[].present? # => false
Run Code Online (Sandbox Code Playgroud)
指定对您来说是假的或特殊的特殊字符串:
not [nil, false, 0, '0', 'f', 'F', 'false', 'FALSE'].include?(value.presence)
Run Code Online (Sandbox Code Playgroud)
或者反过来说:
[true, 1, '1', 't', 'T', 'true', 'TRUE'].include?(value)
Run Code Online (Sandbox Code Playgroud)
如果您使用复选框处理表单提交,或者处理外部输入并且您希望更宽松,这些都很方便.你当然可以自己决定你想接受什么.
| 归档时间: |
|
| 查看次数: |
9104 次 |
| 最近记录: |