gpt4 book ai didi

ruby-on-rails - 从 Virtus.model 动态扩展时使用 boolean 属性辅助方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:59:54 25 4
gpt4 key购买 nike

假设我有一个带有 boolean 属性 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扩展并动态定义一个 boolean 属性时:

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

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

最佳答案

您的项目中很可能还有另一个 gem,它定义了顶级 Boolean,它与 Boolean 属性方法冲突。例如,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-on-rails - 从 Virtus.model 动态扩展时使用 boolean 属性辅助方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43977071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com