Ruby on Rails/Examples
This section is a collection of useful Rails examples.
Step By Step
How to Add a New Table
script/generate model <Name>
Generate the empty model and migration file.
Add columns to the table.
Migrates the data level - that is - creates the new database table.
Define the validations, sizes, etc.
Define the unit tests that exercises the model validations.
If there will be a controller (and views) associated with this Model:
script/generate controller <Name> <action_one> <action_two> ...
Creates the controller and creates a view for each action.
The find method of ActiveRecord is documented in the Rails API manual
pet = Pet.find(pet_id) Find record by id (an integer). Note: Returns one object.
pets = Pet.find(:first, :conditions => ["owner_id = ?", owner_id]) - returns the first matching record. [Note: Returns one object.]
pets = Pet.find(:all, :conditions => ["owner_id = ?", owner_id]) - find all records with a given field value. [Notes: 1. Returns an array of objects. Check for no records found with: pets.empty?. 2.:conditions => supplies an SQL fragment used with WHERE *]
pets = Pet.find(:all, :conditions => ["owner_id = ? AND name = ?", owner_id, name]) - find all records matching multiple field values. [Note: OR also works.]
pets = Pet.find(:all, :conditions => ["name LIKE ?", "Fido%"]) - find all records matching a pattern. Wild cards are % for zero or more of any character, and _ for any single character. To escape a wild card use \% or \_. The reference from MySQL for LIKE will help. On the MySQL Regex website you will find examples for using REGEX.
pets = Pet.find(:all, :order => 'name') - find everything and sort result by name.
pets = Pet.find(:all, :limit => 10, :conditions => ["owner_id = ?", owner_id]) - returns no more than the number of rows specified by :limit.
pets = Pet.find(:all, :offset => 50, :limit => 10) - uses offset to skip the first 50 rows.
$ rake db:migrate - migrate to latest level by executing scripts in <app>/db/migrate. Note: Migration scripts are created by script/generate model <mod-name>
$ rake - run all tests.
$ rake test:functionals - run the functional tests, which test the controllers.
$ rake test:units - run the unit tests, which test the models.
$ test/functional/<name>_controller_test.rb - run one functional test.
$ rake doc:app - generate Ruby Docs for the application. Docs are placed at <app>/doc/app/index.html.
$ rake log:clear - delete all logs.
$ rake tmp:clear - delete temporary files.
$ script/server - start the web server for this app. By default, the server is running in development mode. By default, it will be accessible at web address: http://localhost:3000/
$ RAILS_ENV=test script/server - start the web server in Test Mode.
$ script/server -e test - start the web server in Test Mode.
$ script/server -e production - start the web server in Production Mode (more caching, etc.).
can't convert Fixnum to String
some_number.to_s - every Fixnum has method .to_s to convert it to a String.
Certain useful shell commands that I'm always trying to remember:
grep -r hello . - run grep, searching for 'hello', on every file in the tree starting with the current directory.
tar -cvzf archive.tgz <targ_directory> - tar up directory and compress it with gzip.