views:

44

answers:

4

Hi...

While trying to add an error message using add_to_base, I am getting an undefined method 'errors' message. I am defining it in my model. Am I supposed to include any other file in order to access the errors variable.

Model File - I am defining it inside a method

self.errors.add_to_base("Invalid Name")

Error Message

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

I tried by calling it as errors.add_to_base("Invalid Name") also but still getting the same error.

Thanks.

+1  A: 

you should call it in your callback method, something like following

  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
Salil
That's a lot of selfs (selves?) that can all be omitted.
Lars Haugseth
A: 

I suspect that you have defined your method as a class method, instead of as an instance method.

Class methods look like this on ruby:

def self.checkFoo()
  ...
end

Instance methods looks like this:

def checkFoo()
  ...
end

Check that your checkFoo method is an instance method, and then use it like this:

class MyModel < ActiveRecord::Base
  validate :foo

  private
  def checkFoo()
    self.errors.add etc..
  end
end
egarcia
A: 

Typically used the validation callbacks, model errors are used both to cause the prospective database save to fail and to set up a contextual error messages for the end-user. The add_to_base variant is intended for general, non-specific error conditions (i.e. not associated with a particular model attribute).

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

Subsequently

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

would fail and the @my_model.errors.full_messages array would contain

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

There is however a shorthand for the above example as follows

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

hi Steve

Looks like your 'self.errors.add_to_base("Invalid Name")' doesn't have any problem

But your model should inherit from ActiveRecord::Base

cheers

sameera

sameera207