пользовательские проверки рельсов - PullRequest
0 голосов
/ 20 декабря 2010

Я не уверен, что лучший способ реализовать это - в основном я хотел бы проверить, находится ли мое поле: start_amount моей модели в диапазоне от 0 до user.amount.Я не уверен, как сказать «user.amount», так как он не статичен, как другие проверки.

(для справки я сделал validates_numericality_of :start_amount, :allow_nil => false, :greater_than => 0

, а затем сделал это в той же модели:

def validates
    self.errors.add(:start_amount, "is out of range") unless self.amount_in_allowed_range
  end

  def amount_in_allowed_range
    start_amount <= user.amount
  end

Это довольно просто, поэтому я не думал, что нужно создавать другой класс для проверки (может быть, это единственный способ, которым он работает?) Он работал нормально, кроме случаев, когда я оставил start_amount пустым,в этом случае он сравнивал nil <= user.amount и выдавал ошибку (что я считаю странным, поскольку он должен проверять это в validates_numericity_of - но я предполагаю, что пользовательская проверка запускается первой). Затем я изменил ее на приведенный вышес :allow_nil => false и также установите его как :null => false, :default => 0 в моих миграциях. Теперь он просто не проверяется вообще? или он постоянно равен 0, и поэтому всегда проходит проверку ...)

I 'Я действительно плохо знаком с рельсами и был бы признателен за любую помощь.Спасибо!

1 Ответ

4 голосов
/ 20 декабря 2010
validates_numericality_of :start_amount
validate :amount_in_allowed_range

def amount_in_allowed_range
   self.errors.add(:start_amount, "is out of range") unless start_amount <= self.user.amount
end

Это должно работать, если ваша текущая модель имеет отношение belongs_to к пользователю.Обратите внимание, что пользовательские методы проверки объявляются в единственном числе (validate вместо validates).Кроме того, allow_nil по умолчанию ложно.И я не уверен, почему :default => 0 был установлен в ваших маршрутах?Вы имели в виду миграцию?Пожалуйста, дайте немного больше информации о том, как выглядит ваша установка.Какую ошибку вы получили, когда nil сравнивали с user.amount?

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