ruby on rails - 在运行时从Virtus.model扩展时使用布尔属性帮助器方法



ruby-on-rails ruby-on-rails-4 (1)

最有可能的是在你的项目中有另一个定义了顶级Boolean类的 gem,它与布尔属性方法冲突。 例如,Mongoid就是这样做的。 在这种情况下, Virtus README建议使用该属性的Axiom::Types::Boolean类型。

但是,当我尝试这个,没有帮助。 我相信README实际上是错误的,在问题#234中注明了正确的类型: 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 

比方说,我有一个active的布尔属性的Virtus模型User

class User
  include Virtus.model 
  attribute :active, Boolean, default: false, lazy: true
end

那么我可以用一个辅助方法active?

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

但是,当我尝试从Virtus.model extend并定义一个布尔属性时:

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

并使用辅助方法active? 我得到一个NoMethodError有点例外。

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

在这种情况下有没有使用辅助方法的可能性?