Difference between revisions of "Rails3"
 (→More info)  | 
				|||
| (16 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
{{TocRight}}  | 
  {{TocRight}}  | 
||
Developing for Rails3.  | 
  Developing for Rails3.  | 
||
= Create a new application =  | 
|||
Test your installation by making a test application  | 
|||
 rails new tetsApp  | 
|||
 cd testApp  | 
|||
 rails server  | 
|||
Now check the http://localhost:3000 in your browser.   | 
|||
== Nonstop first app ==  | 
|||
This example is adapted from [http://edgeguides.rubyonrails.org/getting_started.html here]  | 
|||
 rails new blog  | 
|||
 cd blog  | 
|||
 bundle install  | 
|||
 gedit config/database.yml  | 
|||
 rake db:create  | 
|||
 rails generate controller home index  | 
|||
 gedit app/views/home/index.html.erb  | 
|||
Enter the new web page content:  | 
|||
 <nowiki><h1>Hi there!</h1></nowiki>  | 
|||
Set up the new root page  | 
|||
 rm public/index.html  | 
|||
 gedit config/routes.rb  | 
|||
Edit routes, like this  | 
|||
 ...  | 
|||
 root :to => "home#index"  | 
|||
 ...  | 
|||
Test your server at http://localhost:3000  | 
|||
 rails server  | 
|||
==== Create scaffolding ====  | 
|||
 rails generate scaffold Post name:string title:string content:text  | 
|||
 rake db:migrate  | 
|||
= Database =  | 
|||
== Using Mysql ==  | 
|||
=== Making a new application ===  | 
|||
=== database.yml file ===  | 
|||
development:  | 
|||
  adapter: mysql2  | 
|||
  encoding: utf8  | 
|||
  database: blog_development  | 
|||
  pool: 5  | 
|||
  username: root<change this>  | 
|||
  password: <change this>  | 
|||
  socket: /tmp/mysql.sock  | 
|||
== Using Postgres ==  | 
  == Using Postgres ==  | 
||
| Line 6: | Line 64: | ||
 gem install pg  | 
   gem install pg  | 
||
Making a new   | 
  === Making a new application ===  | 
||
 rails -d postgresql my_rails_app  | 
   rails -d postgresql my_rails_app  | 
||
=== database.yml file ===  | 
|||
   development:  | 
     development:  | 
||
    adapter: postgresql  | 
      adapter: postgresql  | 
||
| Line 21: | Line 79: | ||
    template: template0  | 
      template: template0  | 
||
==   | 
  == Reset database ==  | 
||
Try this: http://wiki.rubyonrails.org/database-support/postgres  | 
  |||
=== Reset database contents ===  | 
|||
 rake db:reset  | 
|||
 rake db:migrate  | 
|||
or   | 
|||
 rake db:reset db:migrate  | 
|||
=== Recreate database structure ===  | 
|||
 rake db:drop  | 
|||
 rake db:create  | 
|||
 rake db:migrate  | 
|||
or  | 
|||
 rake db:drop db:create db:migrate  | 
|||
== Cardinality and associations ==  | 
|||
Active Record associations can be used to describe one-to-one, one-to-many and many-to-many relationships between models. Each model uses an association to describe its role in the relation.   | 
|||
The '''belongs_to''' association is always used in the model that has the '''foreign key'''.  | 
|||
==== one-to-one ====  | 
|||
 class Employee < ActiveRecord::Base  | 
|||
   '''has_one''' :office  | 
|||
 end  | 
|||
 class Office < ActiveRecord::Base  | 
|||
   '''belongs_to''' :employee    # foreign key - employee_id  | 
|||
 end  | 
|||
==== many-to-one ====  | 
|||
 class Manager < ActiveRecord::Base  | 
|||
   '''has_many''' :employees  | 
|||
 end  | 
|||
 class Employee < ActiveRecord::Base  | 
|||
   '''belongs_to''' :manager     # foreign key - manager_id  | 
|||
 end  | 
|||
==== many-to-many ====  | 
|||
Method 1. With an intermediate table (Assignment)  | 
|||
 class Assignment < ActiveRecord::Base  | 
|||
   '''belongs_to''' :programmer  # foreign key - programmer_id  | 
|||
   '''belongs_to''' :project     # foreign key - project_id  | 
|||
 end  | 
|||
 class Programmer < ActiveRecord::Base  | 
|||
   '''has_many''' :assignments  | 
|||
   '''has_many''' :projects, ''':through''' => :assignments  | 
|||
 end  | 
|||
 class Project < ActiveRecord::Base  | 
|||
   '''has_many''' :assignments  | 
|||
   '''has_many''' :programmers, ''':through''' => :assignments  | 
|||
 end  | 
|||
Method 2. With an intermediate table that has neither model nor primary key  | 
|||
 class Programmer < ActiveRecord::Base  | 
|||
   '''has_and_belongs_to_many''' :projects       # foreign keys in the join table  | 
|||
 end  | 
|||
 class Project < ActiveRecord::Base  | 
|||
   '''has_and_belongs_to_many''' :programmers    # foreign keys in the join table  | 
|||
 end  | 
|||
----  | 
|||
[http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html More here]  | 
|||
== Database field types ==  | 
|||
{|border=1  | 
|||
! Rails Migration Symbol !! MySQL Data Type  | 
|||
|-  | 
|||
| :binary || blob  | 
|||
|-  | 
|||
| :boolean || tinyint(1)  | 
|||
|-  | 
|||
| :date || date  | 
|||
|-  | 
|||
| :datetime || datetime  | 
|||
|-  | 
|||
| :decimal || decimal  | 
|||
|-  | 
|||
| :float || float  | 
|||
|-  | 
|||
| :integer || int(11)  | 
|||
|-  | 
|||
| :string || varchar(255)  | 
|||
|-  | 
|||
| :text || text  | 
|||
|-  | 
|||
| :time || time  | 
|||
|-  | 
|||
| :timestamp || datetime  | 
|||
|}  | 
|||
= UTF-8 =  | 
|||
If you need UTF-8 encoding for your text in program files, add this magic comment to your file:  | 
|||
 # encoding: utf-8  | 
|||
If you need UTF-8 in your (mysql) database(s), add "encoding: utf8" in the '''config/database.yml'''  | 
|||
  adapter: mysql  | 
|||
  ...  | 
|||
  encoding: utf8  | 
|||
= More info =  | 
|||
* [http://guides.rubyonrails.org/ Guides at RubyonRails.org]  | 
|||
* [http://railscasts.com/ RailsCasts] tutorials  | 
|||
* [http://wiki.rubyonrails.org/database-support/postgres About using postgres]  | 
|||
See also [[RVM]]  | 
|||
Latest revision as of 20:37, 9 July 2012
Developing for Rails3.
Create a new application
Test your installation by making a test application
rails new tetsApp cd testApp rails server
Now check the http://localhost:3000 in your browser.
Nonstop first app
This example is adapted from here
rails new blog cd blog bundle install
gedit config/database.yml rake db:create
rails generate controller home index gedit app/views/home/index.html.erb
Enter the new web page content:
<h1>Hi there!</h1>
Set up the new root page
rm public/index.html gedit config/routes.rb
Edit routes, like this
... root :to => "home#index" ...
Test your server at http://localhost:3000
rails server
Create scaffolding
rails generate scaffold Post name:string title:string content:text rake db:migrate
Database
Using Mysql
Making a new application
database.yml file
development:
adapter: mysql2 encoding: utf8 database: blog_development pool: 5 username: root<change this> password: <change this> socket: /tmp/mysql.sock
Using Postgres
Make sure you have pg gem installed (not the old "postgres" gem)
gem install pg
Making a new application
rails -d postgresql my_rails_app
database.yml file
development: adapter: postgresql host: localhost port: 5432 username: your_db_username password: your_db_password database: your_rails_project_development schema_search_path: public encoding: utf8 template: template0
Reset database
Reset database contents
rake db:reset rake db:migrate
or
rake db:reset db:migrate
Recreate database structure
rake db:drop rake db:create rake db:migrate
or
rake db:drop db:create db:migrate
Cardinality and associations
Active Record associations can be used to describe one-to-one, one-to-many and many-to-many relationships between models. Each model uses an association to describe its role in the relation.
The belongs_to association is always used in the model that has the foreign key.
one-to-one
class Employee < ActiveRecord::Base has_one :office end class Office < ActiveRecord::Base belongs_to :employee # foreign key - employee_id end
many-to-one
class Manager < ActiveRecord::Base has_many :employees end class Employee < ActiveRecord::Base belongs_to :manager # foreign key - manager_id end
many-to-many
Method 1. With an intermediate table (Assignment)
class Assignment < ActiveRecord::Base belongs_to :programmer # foreign key - programmer_id belongs_to :project # foreign key - project_id end class Programmer < ActiveRecord::Base has_many :assignments has_many :projects, :through => :assignments end class Project < ActiveRecord::Base has_many :assignments has_many :programmers, :through => :assignments end
Method 2. With an intermediate table that has neither model nor primary key
class Programmer < ActiveRecord::Base has_and_belongs_to_many :projects # foreign keys in the join table end class Project < ActiveRecord::Base has_and_belongs_to_many :programmers # foreign keys in the join table end
Database field types
| Rails Migration Symbol | MySQL Data Type | 
|---|---|
| :binary | blob | 
| :boolean | tinyint(1) | 
| :date | date | 
| :datetime | datetime | 
| :decimal | decimal | 
| :float | float | 
| :integer | int(11) | 
| :string | varchar(255) | 
| :text | text | 
| :time | time | 
| :timestamp | datetime | 
UTF-8
If you need UTF-8 encoding for your text in program files, add this magic comment to your file:
# encoding: utf-8
If you need UTF-8 in your (mysql) database(s), add "encoding: utf8" in the config/database.yml
adapter: mysql ... encoding: utf8
More info
- RailsCasts tutorials
 
See also RVM