Пользовательская проверка рельсов после редактирования значения поля - PullRequest
5 голосов
/ 23 декабря 2010

В основном у меня есть пользовательская модель, которая имеет поле количества и денег.Когда я впервые создаю пользователя, я проверяю, что user.amount <= user.money.Тем не менее, пользователь может изменить сумму с помощью «редактирования».В действии обновления, когда пользователь изменяет сумму, я вычисляю разницу между старой и новой (старая минус новая) суммами через

  amount_change = user.amount - params[:user][:amount].to_f

. Не знаю, хорошая ли это форма, но она работаетдля меня.По сути, я не храню разницу, а вычисляю ее только по мере того, как пользователь пытается изменить сумму.В любом случае, когда пользователь редактирует, я бы хотел проверить это amount_change <= user.money.Как я могу это сделать?Я чувствую, что должен передать что-то в валидацию, но я не знаю, как я могу передать amount_change, так как он рассчитывается в середине метода обновления моего контроллера пользователей.Большое спасибо!

1 Ответ

11 голосов
/ 23 декабря 2010

Вы можете использовать ActiveModel :: Dirty для доступа к старому значению (как amount_was):

class User < ActiveRecord::Base
  # ...
  validate :ensure_amount_change_less_than_money, 
           :on => :update, 
           :if => :amount_changed?

  def ensure_amount_change_less_than_money
    if (self.amount - self.amount_was) <= self.money
      errors.add(:money, 'Amount change must be less than money')
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...