When to use self in Model?
ruby-on-rails, ruby-on-rails-3, ruby-on-rails-3.1, self
Solution
When you're doing an action on the instance that's calling the method, you use self.
With this code
class SocialData < ActiveRecord::Base
def set_active_flag(val)
active_flag = val
save!
end
end
You are defining a brand new scoped local variable called active_flag, setting it to the passed in value, it's not associated with anything, so it's promptly thrown away when the method ends like it never existed.
self.active_flag = val
However tells the instance to modify its own attribute called active_flag, instead of a brand new variable. That's why it works.
Problem
Question: when do I need to use self in my models in Rails? I have a `set` method in one of my models. ``` class SomeData < ActiveRecord::Base def set_active_flag(val) self.active_flag = val self.save! end end ``` When I do this, everything works fine. However, when I do this: ``` class SomeData < ActiveRecord::Base def set_active_flag(val) active_flag = val save! end end ``` The active_flag value doesn't change, rather it fails silently. Can someone explain? I can't find any duplicates, but if someone finds one that's fine too.