Yesterday's Ruby on Rails training day brought home just how important it is to ensure that your Ruby variables are correctly "scoped" - that you tell Ruby if they're to be local to the method in which they are defined, to be available to all methods that run on the same objects, to all objects of a particular type, or throughout your entire program. You specify the different Ruby variable types by preceeding the variable name with appopriate characters -
@,
@@,
$ or no special character at all.
stuff - a local variable
@stuff - an object variable (one per object)
@@stuff - a class variable (just one for a whole class of objects)
$stuff - a global variable (just one for the program)
There's a further writeup on our web site
[here] including diagrams, and the full Ruby on Rails sample application where it was so important can be found
[here]. I have also added an example which show each of the scope types to our directory of examples - it's
[here].
Why is this scoping so important in Rails?
It's because Ruby on Rails uses ApplicationController classes (and subclasses thereof) to link in data from the model and pass it through to a view; variables that do not start with an
@ or a
$ aren't going to be visible to the viewer, whereas variables that do start with one of those characters will be.
Furthermore, if you have multiple application controller classes (as you're likely to do if you have a complex set of tables relating to different parts of a large application, looked after by a team of programmers), you need to be aware that common code / dynamic object variables are going to be best placed in the base ApplicationController class for sharing, whereas dynamic object variables that are specific to views of certain parts of the model only are best in the subclasses of the overall application controller.
In the example that's on our web site, where we are only managing two joined tables, we only have a single application controller subclass where we have chose to put all the logic - you can see that code
[here]. The base class for common controller code is just an empty container that passed on the inheritance from the basic class that's supplied with the Ruby on Rails framework - you can see that (automatically generated, not altered by us in this case) file
[here]
(written 2010-01-31)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
R202 - Ruby on Rails [1050] The HTML++ Metalanguage - (2007-01-22)
[1302] Ruby, Ruby, Ruby. Rails, Rails, Rails. - (2007-08-13)
[1375] Python v Ruby - (2007-10-02)
[1745] Moodle, Drupal, Django (and Rails) - (2008-08-08)
[2605] Ruby on Rails - a sample application to teach you how - (2010-01-30)
[2607] Answers on Ruby on Rails - (2010-01-30)
[3624] Why do we need a Model, View, Controller architecture? - (2012-02-25)
[3756] Ruby on Rails - how it flows, and where the files go - (2012-06-08)
[3772] Hello World - Ruby on Rails - a checklist of each step - (2012-06-22)
[3777] Multiple views in a single appication - sharing common parts of the template - Ruby on Rails - (2012-06-23)
[3778] Providing a form to allow the user to add data to the model - Ruby on Rails - (2012-06-23)
[3779] Adding validation to form entries and sticky fields - Ruby on Rails - (2012-06-23)
[3780] Ruby of Rails - cleanly displaying model data in the view - (2012-06-23)
[3919] What is a web framework? - (2012-11-10)
[4010] Really Simple Rails - (2013-02-17)
[4013] Web Frameworks - nested templates - (2013-02-22)
R105 - Ruby - Classes and Objects [983] Blessing in Perl / Member variable in Ruby - (2006-12-14)
[1925] Introduction to Object Oriented Programming - (2008-12-06)
[2292] Object Orientation in Ruby - intermediate examples - (2009-07-16)
[2603] Ruby objects - a primer - (2010-01-29)
[2616] Defining a static method - Java, Python and Ruby - (2010-02-01)
[2651] Calculation within objects - early, last minute, or cached? - (2010-02-26)
[3421] Ruby off the Rails? - (2011-09-06)
[4009] Clear, concise examples - Ruby classes and objects. - (2013-02-17)
[4502] Reading and parsing a JSON object in Ruby - (2015-06-01)
Some other Articles
Constants in RubyThe Model, View, Controller architecture (MVC) - what, why and how.Sunday Evening, City of LondonCheat Sheet - what do you need for Ruby on Rails?Scope of variables - important to Ruby on RailsSearch and replace in Ruby - Ruby Regular ExpressionsSorting arrays and hashes in RubyTips for writing a test program (Ruby / Python / Java)