Rails 3: Difference between revisions

From Wiki
Jump to navigation Jump to search
Line 52: Line 52:
<pre>
<pre>
rails generate scaffold Article title:string body:text published_at:datetime --skip-migration
rails generate scaffold Article title:string body:text published_at:datetime --skip-migration
</pre>
To modify the table, generate a custom migration:
<pre>
rails generate migration add_excerpt_and_location_to_articles excerpt:string location:string
</pre>
creates this migration file <code>db/migrate/20100223232337_add_excerpt_and_location_to_articles.rb</code>:
<pre>
class AddExcerptAndLocationToArticles < ActiveRecord::Migration
    def self.up
        add_column :articles, :excerpt, :string
        add_column :articles, :location, :string
    end
    def self.down
        remove_column :articles,
        :excerpt remove_column :articles, :location
    end
end
</pre>
</pre>



Revision as of 23:59, 9 June 2011

Application Setup

  • create project with
rails new my_project
rails -d mysql new my_project  # if you don't want the default sqlite3
  • add gem dependencies to Gemfile at the root level
  • update config/application.rb to load needed dependencies and update defaults
  • double-check /config/initializers and /config/environments
  • edit config/database.yml to connect to your database

Notes

Files in lib/ are not automatically loaded, so you need to require them.

In config/environments/development.rb, set

config.action_mailer.perform_deliveries = false

No delivery attempt is performed, but you can still see the mail in the log file to check it looks good

Database Setup

  • create database with
rake db:create

Create Table

rails generate model Article

Edit db/migrate/20100223220648_create_articles.rb to look like this:

class CreateArticles < ActiveRecord::Migration
    def self.up 
        create_table :articles do |t|
            t.string :title
            t.text :body
            t.datetime :published_at
            t.timestamps
        end
    end
    def self.down
        drop_table :articles
    end
end

To create/update the table:

rake db:migrate

To make a scaffold for the table to allow easy create/update/delete in development:

rails generate scaffold Article title:string body:text published_at:datetime --skip-migration

To modify the table, generate a custom migration:

rails generate migration add_excerpt_and_location_to_articles excerpt:string location:string

creates this migration file db/migrate/20100223232337_add_excerpt_and_location_to_articles.rb:

class AddExcerptAndLocationToArticles < ActiveRecord::Migration
    def self.up
        add_column :articles, :excerpt, :string
        add_column :articles, :location, :string
    end
    def self.down
        remove_column :articles,
        :excerpt remove_column :articles, :location
    end
end

Other rails commands

rails console
rails dbconsole
rails server
rails runner

Routing

Configured in config/routes.rb

match 'products/:id' => 'products#show'

The url http://localhost:3000/products/8 will be mapped to the show action of the products controller with params[:id] set to 8

To create a link to this route (old way):

link_to "Products", :controller => "products", :action => "show", :id => 1

To restrict the HTTP method, use get or post instead of match:

get 'products/:id' => 'products#show'

To redirect:

match "/foo", :to => redirect("/bar")

Logging

Use these in models, views, controllers to send timestamped messages to the log.

logger.debug "debug message"
logger.info "info message"
logger.warn "something bad"
logger.error "something broke"
logger.fatal "application dead"