Why use "self" to access ActiveRecord/Rails model properties?
ruby, ruby-on-rails, ruby-on-rails-3, validation
Solution
Often the use of `self` is to force Ruby to recognize that as a method call and not mis-interpret it as a variable. Without prior knowledge of a method called `day=`, then `day = "x"` looks to Ruby like a variable assignment. `self.day = "x"` is always a method call.
The reason this is trouble is because the `name` and `name=` 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 your `user.rb` file is parsed.
Problem
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.