Спасибо за ваш ответ.
Я наконец получил это.
validates_numericality_of :sales_price, :greater_than => 0,
:allow_blank => true
validates_numericality_of :retail_price, :greater_than => 0,
:allow_blank => true
validates_numericality_of :sales_price, :less_than => :retail_price,
:if => Proc.new { |o| !o.retail_price.nil? } ,
:message => "can't be greater than retail price."
Теперь у меня есть другая проблема.Я использую rails.validation.js, который помогает мне выполнять проверки на стороне клиента.Все нормально, если вы используете что-то подобное в числовом валидаторе:
:greater_than => 0
validation.js создает функцию, которая проверяет, больше ли значение в поле, чем 0. Функция создается так:
new Function("return " + element.val() + CHECKS[check] + options[check])()))
элемент - это мое поле ввода, CHECKS содержит другой хеш: less_than: <, большее_than:> и т. Д. Options [check] содержит некоторое значение, которое передается в валидатор (: more_than => 0, ноль в этомcase, options [check] is less_than: '0').Но когда я использую что-то другое вместо значения, я получаю сообщение об ошибке:
Uncaught ReferenceError: retail_price is not defined
Я пробовал что-то подобное
validates_numericality_of :sales_price, :less_than => Proc.new{ self.retail_price },
:if => Proc.new { |o| !o.retail_price.nil? } ,
:message => "can't be greater than retail price."
, но объект не существует, когда выполняется проверка, поэтому self просто указывает на класс, а retail_price не существует.
что бы вы порекомендовали для решения проблемы?