2010-06-28 2 views
2

При попытке добавить сообщение об ошибке с помощью add_to_base, я получаю сообщение об ошибках неопределенного метода. Я определяю его в своей модели. Должен ли я включать любой другой файл для доступа к переменной ошибок.Ошибка проверки правильности

Файл модели - я определяю его внутри метода

self.errors.add_to_base("Invalid Name") 

Сообщение об ошибке

undefined method `errors' for #<Class:0x0000010179d7a0> 

Я пытался по телефону как errors.add_to_base("Invalid Name") также, но все еще получаю ту же ошибку.

Спасибо.

+2

Пожалуйста, включите больше вашего кода модели. Сообщение об ошибке предполагает, что * self * указывает на экземпляр класса * Class *, а не на экземпляр вашего модельного класса. –

+0

Пожалуйста, разместите свой файл модели. – Dex

ответ

4

вы должны вызвать его в вашем методе обратного вызова, что-то вроде следующих

def validate 
    if !self.interests.blank? && !self.interests.match("<").nil? 
     self.errors.add :base, 'Please ensure that Interest field do not contain HTML(<and>) tags' 
    end 
    end 
+0

Это много самопознания (я?), Которые можно опустить. –

1

Я подозреваю, что вы определили свой метод как метод класса, а не как метод экземпляра.

методы класса выглядеть на рубин:

def self.checkFoo() 
    ... 
end 

методы экземпляра выглядит следующим образом:

def checkFoo() 
    ... 
end 

Убедитесь, что ваш метод checkFoo является методом экземпляра, а затем использовать его как это:

class MyModel < ActiveRecord::Base 
    validate :foo 

    private 
    def checkFoo() 
    self.errors.add etc.. 
    end 
end 
0

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

class MyModel < ActiveRecord::Base 
    validate do |my_model| 
    if my_model.some_attribute.blank? # For example 
     my_model.errors.add :my_model, "must be filled in" 
    end 
    end 
end 

Впоследствии

@my_model = MyModel.create(:some_attribute => "") 

потерпит неудачу и массив @ my_model.errors.full_messages будет содержать

[ ..., "Some_attribute must be filled in", ... ] 

Существует, однако сокращение для приведенного выше примера следующим образом

class MyModel < ActiveRecord::Base 
    validates_presence_of :some_attribute, :msg => "must be filled in" 
end 
0

Просмотров как ваш 'self.errors.add_to_base ("Invalid Name")' не имеет каких-либо проблем

Но ваша модель должна наследовать от ActiveRecord :: Base

веселит

Sameera

Смежные вопросы