Difference between revisions of "Rails3"

From DiLab
Jump to: navigation, search
(New page: == Using Postgres == Make sure you have pg gem installed (not the old "postgres" gem) gem install pg Making a new app rails -d postgresql my_rails_app Your database.yml file develop...)
 
(More info)
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{TocRight}}
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 ==
Make sure you have pg gem installed (not the old "postgres" gem)
Make sure you have pg gem installed (not the old "postgres" gem)
gem install pg
gem install pg


Making a new app
=== Making a new application ===
rails -d postgresql my_rails_app
rails -d postgresql my_rails_app


Your database.yml file
=== database.yml file ===
development:
development:
adapter: postgresql
adapter: postgresql
Line 17: Line 78:
encoding: utf8
encoding: utf8
template: template0
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

----
[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 21: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

More here

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

See also RVM