Rails 3: Difference between revisions
Line 74: | Line 74: | ||
end | end | ||
</pre> | </pre> | ||
Run <code>rake db:migrate</code> again to update the database. | |||
Now update the scaffold: | Now update the scaffold: | ||
<pre> | <pre> |
Revision as of 00:04, 10 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
Make a Scaffold
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
Update table and scaffold
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
Run rake db:migrate
again to update the database.
Now update the scaffold:
rails generate scaffold Article title:string location:string excerpt:string body:text published_at:datetime --skip-migration
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"