несколько проверок на основе действий с рельсами - PullRequest
0 голосов
/ 15 апреля 2011

как могут быть разные проверки в зависимости от действия?

validates :total_pressed,
          :numericality => { :on => :create, :greater_than => 0 },
          :numericality => { :on => :update, :greater_than_or_equal_to => 100 }

первый оператор чисел игнорируется

Ответы [ 3 ]

1 голос
/ 15 апреля 2011

Вы можете использовать validate_on_create и validate_on_update

def validate_on_create # is only run the first time a new object is saved
  errors.add(:total_pressed, 'invalid number') if total_pressed < 0
end

def validate_on_update
  errors.add(:total_pressed, 'invalid number') if total_pressed < 100
end
0 голосов
/ 15 апреля 2011

В вашей проверке первое числовое выражение игнорируется, потому что это хеш, а одно переписывает другое

Вы можете сделать это:

validates :total_pressed, :numericality => { :on => :create, :greater_than => 0 }
validates :total_pressed, :numericality => { :on => :update, :greater_than_or_equal_to => 100 }
0 голосов
/ 15 апреля 2011

Как правило, проверка выполняется как при создании, так и при обновлении (с помощью сохранения), поэтому, если вы передадите флаг включения, вы ограничите его одним из двух методов.Если вы хотите иметь различную валидацию в зависимости от действия, то лучше использовать пользовательскую валидацию.

т.е.

validate :total_pressed_on_create, :total_pressed_on_update

def total_pressed_on_create
  errors.add(:total_pressed, 'invalid number') if self < 0 and self.new_record?
end

def total_pressed_on_update
  errors.add(:total_pressed, 'invalid number') if self < 100 and !self.new_record?
end

Что-то в этом роде.Проверьте Rails Guide: Validation для более подробной информации.

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