I’m a little confused when I should be using ‘self’ in my model.
I had code like:
class User < ActiveRecord::Base
before_save :do_something
def do_something
self.user_bio_text = …
…
self.user_bio_text
end
end
If I removed ‘self’, it didn’t seem to set the model’s attribute at all (it would return nil).
I can’t recall exaclty where this happenend in my code, but I remember that I was trying to get the a model’s attribute and it didn’t work when I used ‘self.some_attribute’.
So I’m confused, when do I use ‘self’ and when’t don’t I?
I'm a little confused when I should be using 'self' in my model.
I had code like:
class User < ActiveRecord::Base
before_save :do_something
def do_something
self.user_bio_text = ....
..
self.user_bio_text
end
end
If I removed 'self', it didn't seem to set the model's attribute at all (it
would return nil).
Ruby doesn't know whether foo = blah means set the local variable foo
or call your foo= accessor method and default to creating the local
variable, so if you did want to call the accessor method you need to
disambiguate it, with self.foo =
But why is that? Shouldn't both getting and setting have similiar
behaviour?
I think when I was getting a value, using self.attribute wasn't working, is
that the case or was I doing somehting else wrong?
There is the same ambiguity when getting a value, however (unlike when
setting)
if there is no local variable called foo then ruby can assume that foo
means self.foo.
If there was such a local variable then you'd need to disambiguate in
the same way
I just want to understand, why is it different when setting a value, why doesn’t it assume I want self.attribute1 if there was no local variable with the same name e.g. ‘attribute1’.