繁体   English   中英

Ruby / Rails ActiveRecord属性find boolean

[英]Ruby/Rails ActiveRecord attribute find boolean

我正在寻找一种很好的方法来查找ActiveRecord属性是否为布尔值,我在这里有这个方法来检查存在的摘要属性还是有数据,它是通过value.nil? || value.zero? value.nil? || value.zero? 但现在我们有一个例外,其中值可以是布尔值。 所以它爆发了NoMethodError: undefined method zero?' for false:FalseClass NoMethodError: undefined method zero?' for false:FalseClass

def self.summary_attribute_status(element)
  # Check if all summary attributes zero or nil
  result = element.class.attributes_for_tag(:summary_attributes).all? do |attribute| 
    value = element.send(attri bute)
    next element
    value.nil? || value.zero? 
  end
  return result ? nil : 'something'
end

我可以这样做:

value.nil? || value.zero? || (!value.is_a? TrueClass || !value.is_a? FalseClass)

但似乎应该有一种更好的方法来查找它的一般类型,我试图找到它们是否共享一个布尔类型的父类或超类,但它们都继承自Object < BasicObject 没有别的办法吗?

还有另一种方法可以检测值是否是ruby中的布尔值。

!!value == value #true if boolean

但我不认为有任何内置的方法。

例如,如果您有一个具有布尔属性adminUser类,则可以执行以下操作:

User.columns_hash['admin'].type 
# => :boolean

在这里阅读有关columns_hash更多信息: http//api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-columns_hash

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM