我有一个模型愿望包含before_validation
调用的波纹管方法:
def set_to_false
self.confirme ||= false
self.deny ||= false
self.favoris ||= false
self.code_valid ||= false
end
当我运行测试时,我收到了弃用消息
弃权警告:您试图分配的值不是 显式
true
或false
到布尔列。目前这个价值 施放到false
。这将改变以匹配Ruby的语义,并且会 在Rails 5中转换为true
。如果你想保持当前状态 行为,您应该显式处理您想要转换的值 到false
。 (来自cast_value at ./Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activerecord-4.2.1/lib/active_record/type/boolean.rb:17)
我知道我必须投,但我找不到一种简单而聪明的方法来做到这一点。任何删除此弃用的帮助都会很棒。
答案 0 :(得分:4)
这是一个我经常使用的简单的布尔化技巧,双重否定:
before_validation :booleanify
def booleanify
self.confirm = !!confirm
self.deny = !!deny
...
end
如果你不熟悉这个技巧,根据ruby规则(nil
和false
成为false
,它会将所有值转换为它们的布尔值等价物,一切否则变为true
)
'foo' # => "foo"
!'foo' # => false
!!'foo' # => true
!nil # => true
!!nil # => false