I started learning rails by following the agile way. It comes to the point where it puzzles me. class Puzzle < ActiveRecord::Base # virtual var, not existing in the database def var @var end def var=(foo) @var= foo @var_in_database = @var + 1 # var_in_database exists in database end end Then when I do a save of this model it does nothing. I know that if I instead put self.var_in_database it would work perfectly, but from my limited knowledge of ruby @var should be working like self.var in most cases. Now it is the rare case but I can't find the reason why this doesn't work. Please solve my puzzle, thank you.
on 2007-05-20 20:08
on 2007-05-20 21:20
The answer is easy - @var and self.var are not the same. All variables in Ruby (it's a Ruby question, not Rails) are private and you can never make them public directly. What is usually done is creating getters and seters with the same name. Like this class Foo def var @var end def var=(v) @var = v end end or like this (which does he same for you): class Foo attr_acessor :var end So when you are talking about ActiveRecord objects, you must use self.var, to call the magic methods created for you by ActiveRecord. Cheers, Yuri On 5/20/07, itsnotvalid <email@example.com> wrote: > > cases. Now it is the rare case but I can't find the reason why this > doesn't work. > > Please solve my puzzle, thank you. > > > > > -- Best regards, Yuri Leikind
on 2007-05-20 21:22
> All variables in Ruby (it's a Ruby question, not Rails) are private I meant all object variables here