Проверка номера - ссылка на другой атрибут - PullRequest
1 голос
/ 08 ноября 2011

Мне нужна проверка, чтобы проверить, является ли атрибут меньше или равен другому (виртуальному) атрибуту той же записи.Как я могу это сделать?

Пример кода (не работает - NoMethodError):

attr_reader :virt
attr_accessible :virt

validates :my_attr, :numericality => {:only_integer => true, :less_or_equal => self.virt}

(пожалуйста, будьте осторожны и откровенны, я новичок в RoR:])

1 Ответ

3 голосов
/ 08 ноября 2011

Поскольку эти строки проверки будут выполняться при первом обнаружении определения класса, 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...