ruby-on-rails - pattern - gem virtus



Используйте вспомогательные методы boolean при распространении от Virtus.model на лету (1)

Скорее всего, в вашем проекте есть еще один камень, который определяет класс Boolean верхнего уровня и он сталкивается с методами Boolean attribute. Известно , что это монгодский язык. В этом случае Virtus README предлагает вместо этого использовать тип Axiom::Types::Boolean .

Однако, когда я пробовал это, это не помогло. Я считаю, что README на самом деле ошибочно, правильный тип отмечается в комментарии № 234 : 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 

Предположим, у меня есть модель Virtus User с active атрибутом boolean:

class User
  include Virtus.model 
  attribute :active, Boolean, default: false, lazy: true
end

Тогда я мог бы использовать вспомогательный метод active? :

User.new.active? # => false
User.new(active: true).active? # => true

Но когда я пытаюсь extend Virtus.model и определить логический атрибут «на лету»:

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

Есть ли возможность использовать вспомогательные методы в этой ситуации?