Satya's blog - Ruby on Rails instance variables explained
Instance variables (@foo, for example) are a Ruby concept, not Rails. But it's a little confusing in the Rails' Model-View-Controller paradigm. Consider that in pure Ruby, an instance variable is available to an object (which is *instantiated* from a class). The instance variable can be used and changed by any methods of the object. This is unlike non-@ variables, which are limited to the scope where they're defined: def ex1 foo=1 # defined within the ex1 method end def ex2 if @foo==1 bar=1 end bar # nil, because it's out of scope end def ex3 @foo=1 # remains defined after ex3 returns end Now here's my point: in Rails, instance variables defined in a controller method are available to the view, but not to any models called from that method. Why? Because a Rails view is NOT a separate class. It's a template and it's part of the current controller object. A model is a separate class. That's all. It's a simple point, but it can be confusing at first to those not familiar with Ruby or Object Oriented Programming. |
|