加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读