ruby-on-rails – 在动态扩展Virtus.model时使用布尔属性帮助器
发布时间:2020-12-16 21:12:19 所属栏目:百科 来源:网络整理
导读:假设我有一个具有布尔属性的Virtus模型User: class User include Virtus.model attribute :active,Boolean,default: false,lazy: trueend 然后我可以使用辅助方法激活吗?: User.new.active? # = falseUser.new(active: true).active? # = true 但是当我尝
假设我有一个具有布尔属性的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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |