проверка rails 3 в методах экземпляра модели

#ruby-on-rails-3 #validation

#ruby-on-rails-3 #проверка

Вопрос:

я хочу вызвать метод проверки активной записи в моем пользовательском методе проверки, например

 class Asset < ActiveRecord::Base
  validate :ensure_unique_identification_code
  validates :name,:uniqueness=>true

 def ensure_unique_identification_code
   self.identifier="identifier code" #code is generated using some helper method of Asset model
  validates :identifier ,:uniqueness=>true

 end
end
  

выдает ошибку

 undefined method `validates' for #<Asset:0xb6692dbc>
  

как мы можем вызывать методы проверки в методах экземпляра модели

Комментарии:

1. Вероятно, это не решение, но вы уверены, что используете Rails 3? Проверка уникальна для 3, обычно, когда возникает эта ошибка, люди все еще находятся на 2.3.

2. да, я на rails 3 rails -v => Rails 3.0.4

3. вместо этого используйте «validates_uniqueness_of:identifier» и фильтр before_validation для вашего пользовательского кода.

Ответ №1:

Возможно, вы используете новую версию Rails (3.x.x) (rails -v), но у вас все еще есть старое приложение Rails… Вы должны сгенерировать приложение Rails в другой папке, а затем переместить ваши files .rb, views и так Далее в ваше новое приложение / папку… Я подтверждаю, что «проверка уникальна для 3, обычно, когда возникает эта ошибка, люди все еще находятся на уровне 2.3», как сказал a3uge.

Ответ №2:

Вы можете создать экземпляр конкретного средства проверки и напрямую вызвать метод validate():

 def age_validation
  ActiveModel::Validations::NumericalityValidator.new(
    :greater_than_or_equal_to => 0,
    :less_than_or_equal_to => 100,
    :attributes => :age
  ).validate(self)
end