Sometimes I get a little confused about the difference between accessing an instance attribute via self.attribute and by @attribute, so one day I look up the stackoverflow to clear up my thoughts. The answers below are some good tips on the subject based on the site.
Here’s What the Best Answer Would Suggest
self.attribute calls the method attribute.self.attribute = value calls the method attribute= with the argument value.@attribute and @attribute = value get/set the value of the instance variable @attribute.
So basically they’re two entirely different things.
However if you call attr_accessor :attribute it defines the method attribute to return @attribute and the method attribute=(value) to set @attribute = value. So in that case, there is no difference.
The Comment is also Helpful
Note that it is generally recommended to use self. (unless you’re writing the getter/setter method) even if you currently have attr_accessor. This protects you from additional refactor work and bugs if you later change the accessor method(s) to do more than just get/set the instance variable. (Or if someone else patches or subclasses your work.)