Rails 3: Difference between revisions
| Line 83: | Line 83: | ||
<pre> | <pre> | ||
rails generate scaffold Article title:string location:string excerpt:string body:text published_at:datetime --skip-migration | rails generate scaffold Article title:string location:string excerpt:string body:text published_at:datetime --skip-migration | ||
</pre> | |||
=== Add validations to the model === | |||
Edit <code>app/models/article.rb</code>: | |||
<pre> | |||
class Article < ActiveRecord::Base | |||
validates :title, :presence => true | |||
validates :body, :presence => true | |||
end | |||
</pre> | </pre> | ||
Revision as of 00:08, 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
Gemfileat the root level - update
config/application.rbto load needed dependencies and update defaults - double-check
/config/initializersand/config/environments - edit
config/database.ymlto 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 a table and its controller
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 generate the controller:
rails generate controller articles
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
Add validations to the model
Edit app/models/article.rb:
class Article < ActiveRecord::Base
validates :title, :presence => true
validates :body, :presence => true
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"