Throughout my application self. is not necessary to refer to a User’s name. name works fine.
Why does the following code require self to work as intended?
class User< ActiveRecord::Base
before_save :validate_name
def validate_name
if self.name.nil? || self.name.empty?
self.name= "Mr. No Name"
end
end
By the way, I know that validates_presence_of can be used to prevent the save, but I want to save with a default if no name is given.
Rails 3.0.7.
Often the use of
selfis to force Ruby to recognize that as a method call and not mis-interpret it as a variable. Without prior knowledge of a method calledday=, thenday = "x"looks to Ruby like a variable assignment.self.day = "x"is always a method call.The reason this is trouble is because the
nameandname=methods are added dynamically after the User class file has been parsed. The first thing Rails does when using a model is make methods for the associated database fields, but this happens after youruser.rbfile is parsed.