我正在使用Virtus gem并尝试将字符串自动转换为布尔值,但没有成功...... 如果你能看出这段代码有什么问题......
Virtus.coercer do |config|
config.string.boolean_map = { 'true' => true, 'false' => false }
end
class BookingWizard
include Virtus
extend ActiveModel::Naming
include ActiveModel::Conversion
include ActiveModel::Validations
attribute :know_doctor, Boolean, default: false
end
1.9.3 (main):0 > b = BookingWizard.new
=> #<BookingWizard:0x007fea748bf338
@know_doctor=false>
1.9.3 (main):0 > b.know_doctor = "true"
=> "true"
1.9.3 (main):0 > b.know_doctor
=> "true"
1.9.3 (main):0 > b.know_doctor.class
=> String
1.9.3 (main):0 > Virtus.coercer[String].to_boolean("true")
=> true
答案 0 :(得分:0)
如果已经定义了Axiom::Types::Boolean
类,请尝试使用Boolean
代替Boolean
。
class BookingWizard
include Virtus
attribute :know_doctor, Axiom::Types::Boolean, default: false
end
如果这可行,则可能是在Virtus之前找到了一个::Boolean
类。在pry中使用show-source Boolean
查找您的Boolean
类。