首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态从Virtus.model扩展时使用布尔属性助手方法

动态从Virtus.model扩展时使用布尔属性助手方法
EN

Stack Overflow用户
提问于 2017-05-15 10:25:19
回答 1查看 1K关注 0票数 7

假设我有一个带有布尔属性User的Virtus模型active

代码语言:javascript
复制
class User
  include Virtus.model 
  attribute :active, Boolean, default: false, lazy: true
end

然后我就可以使用帮助方法active?了。

代码语言:javascript
复制
User.new.active? # => false
User.new(active: true).active? # => true

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

代码语言:javascript
复制
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异常。

代码语言:javascript
复制
user.active? # => NoMethodError: undefined method `active?' for

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-15 20:34:11

很可能在您的项目中有另一个创业板,定义了一个顶级的类,它与布尔属性方法相冲突。例如,蒙古就是这样做的已知。在这种情况下,Virtus README使用属性的Axiom::Types::Boolean类型。

然而,当我尝试这个,它没有帮助。我认为自述程序实际上是错误的,正确的类型在Virtus::Attribute::Boolean.:第234号问题评论中有记录。

一个完整的工作示例:

代码语言:javascript
复制
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 
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43977071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档