Поскольку эти строки проверки будут выполняться при первом обнаружении определения класса, self.virt
не существует.
Обычно вместо этого вы можете передать лямбду / proc, которая будет call
редактируется во время проверки из области объекта:
validates :my_attr, :numericality => { :less_or_equal => lambda { virt } }
Это все же не так уж и здорово.Лучшим способом было бы просто определить свой собственный метод проверки:
validate :my_attr_is_within_range
def my_attr_is_within_range
my_attr <= virtual_attribute
end
Это намного чище и более явно.Обратите внимание, что вам не нужно использовать self
здесь, так как нет никакой двусмысленности (если вы устанавливаете, вам понадобится self
).