Home Accessibility Courses Diary The Mouth Facebook Resources Site Map About Us Contact
Scope of variables - important to Ruby on Rails

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
R105 - Ruby - Classes and Objects
  [4009] Clear, concise examples - Ruby classes and objects. - (2013-02-17)
  [3421] Ruby off the Rails? - (2011-09-06)
  [2651] Calculation within objects - early, last minute, or cached? - (2010-02-26)
  [2616] Defining a static method - Java, Python and Ruby - (2010-02-01)
  [2603] Ruby objects - a primer - (2010-01-29)
  [2292] Object Orientation in Ruby - intermediate examples - (2009-07-16)
  [1925] Introduction to Object Oriented Programming - (2008-12-06)
  [983] Blessing in Perl / Member variable in Ruby - (2006-12-14)

R202 - Ruby on Rails
  [4013] Web Frameworks - nested templates - (2013-02-22)
  [4010] Really Simple Rails - (2013-02-17)
  [3919] What is a web framework? - (2012-11-10)
  [3780] Ruby of Rails - cleanly displaying model data in the view - (2012-06-23)
  [3779] Adding validation to form entries and sticky fields - 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)
  [3777] Multiple views in a single appication - sharing common parts of the template - Ruby on Rails - (2012-06-23)
  [3772] Hello World - Ruby on Rails - a checklist of each step - (2012-06-22)
  [3756] Ruby on Rails - how it flows, and where the files go - (2012-06-08)
  [3624] Why do we need a Model, View, Controller architecture? - (2012-02-25)
  [2607] Answers on Ruby on Rails - (2010-01-30)
  [2605] Ruby on Rails - a sample application to teach you how - (2010-01-30)
  [1745] Moodle, Drupal, Django (and Rails) - (2008-08-08)
  [1375] Python v Ruby - (2007-10-02)
  [1302] Ruby, Ruby, Ruby. Rails, Rails, Rails. - (2007-08-13)
  [1050] The HTML++ Metalanguage - (2007-01-22)


Back to
Search and replace in Ruby - Ruby Regular Expressions
Previous and next
or
Horse's mouth home
Forward to
Cheat Sheet - what do you need for Ruby on Rails?
Some other Articles
Constants in Ruby
The Model, View, Controller architecture (MVC) - what, why and how.
Sunday Evening, City of London
Cheat Sheet - what do you need for Ruby on Rails?
Scope of variables - important to Ruby on Rails
Search and replace in Ruby - Ruby Regular Expressions
Sorting arrays and hashes in Ruby
Tips for writing a test program (Ruby / Python / Java)
4255 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2014: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 899360 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/2609_Sco ... Rails.html • PAGE BUILT: Sun Mar 30 15:20:58 2014 • BUILD SYSTEM: WomanWithCat