Difference between revisions of "Rails3"

From DiLab
Jump to: navigation, search
(Nonstop first app)
(More info)
 
(10 intermediate revisions by the same user not shown)
Line 2: Line 2:
Developing for Rails3.
Developing for Rails3.


== Create a new application ==
= Create a new application =


Test your installation by making a test application
Test your installation by making a test application
Line 13: Line 13:


== Nonstop first app ==
== Nonstop first app ==
(Adapted from [http://edgeguides.rubyonrails.org/getting_started.html here]
This example is adapted from [http://edgeguides.rubyonrails.org/getting_started.html here]
rails new blog
rails new blog
cd blog
cd blog
Line 43: Line 43:
rake db:migrate
rake db:migrate



= Database =
== Using Mysql ==
== Using Mysql ==


Line 77: Line 79:
template: template0
template: template0


== More info ==
== 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

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