# Ruby on Rails/Examples

This section is a collection of useful Rails examples.

## important note

rails command now start with "rails" and not "script/"

## Step By Step
### How to Add a New Table

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:
Creates the controller and creates a view for each action.

## Find

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. pet_id should be primary number.
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
### Migrations

$ 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>

### Testing

$ 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.

### Documentation

$ rake doc:app - generate Ruby Docs for the application. Docs are placed at <app>/doc/app/index.html.

### Clean Up

$ rake log:clear - delete all logs.
$ rake tmp:clear - delete temporary files.

## Server

$ 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.).

## Fixing Errors
### can't convert Fixnum to String

some_number.to_s - every Fixnum has method .to_s to convert it to a String.

## Shell Commands

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.