ruby-on-rails – 在动态扩展Virtus.model时使用布尔属性帮助器方法

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 在动态扩展Virtus.model时使用布尔属性帮助器方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一个具有布尔属性的Virtus模型User:
class User
  include Virtus.model 
  attribute :active,Boolean,default: false,lazy: true
end

然后我可以使用辅助方法激活吗?:

User.new.active? # => false
User.new(active: true).active? # => true

但是当我尝试从Virtus.model扩展并动态定义一个布尔属性时:

class User; end
user = User.new
user.extend(Virtus.model)
user.attribute(:active,Axiom::Types::Boolean,lazy: true)
user.active = true

并使用辅助方法激活?我得到一个NoMethodError有点例外.

user.active? # => NoMethodError: undefined method `active?' for

在这种情况下是否有可能使用辅助方法

解决方法

很可能在您的项目中有另一个gem定义了顶级布尔类,并且它与布尔属性方法冲突.例如,Mongoid就是 known.在这种情况下,Virtus README suggests使用Axiom :: Types :: Boolean类型的属性代替.

但是,当我尝试这个时,它没有帮助.我认为README实际上是错误的,在Issue #234 comment中记录了正确的类型:Virtus :: Attribute :: Boolean.

一个完整的工作示例:

class User; end
user = User.new
user.extend(Virtus.model)
user.attribute(:active,Virtus::Attribute::Boolean,# <- note the type
               default: false,lazy: true)
user.active = true
user.active?
#=> true

猜你在找的Ruby相关文章