Виртус и логическое преобразование

Я использую 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 ответов

Попробуйте использовать Axiom::Types::Boolean вместо того Boolean если у вас уже есть Boolean класс определен.

class BookingWizard
  include Virtus

  attribute :know_doctor, Axiom::Types::Boolean, default: false
end

Если это сработает, у вас, вероятно, есть ::Booleanкласс, который встречается раньше, чем Virtus. Использоватьshow-source Booleanв попытке найти свойBoolean учебный класс.

Другие вопросы по тегам