Difference between revisions of "Rails3"
(→one-to-one) |
(→many-to-many) |
||
Line 125: | Line 125: | ||
class Assignment < ActiveRecord::Base |
class Assignment < ActiveRecord::Base |
||
belongs_to :programmer # foreign key - programmer_id |
'''belongs_to''' :programmer # foreign key - programmer_id |
||
belongs_to :project # foreign key - project_id |
'''belongs_to''' :project # foreign key - project_id |
||
end |
end |
||
class Programmer < ActiveRecord::Base |
class Programmer < ActiveRecord::Base |
||
has_many :assignments |
'''has_many''' :assignments |
||
has_many :projects, :through => :assignments |
'''has_many''' :projects, ''':through''' => :assignments |
||
end |
end |
||
class Project < ActiveRecord::Base |
class Project < ActiveRecord::Base |
||
has_many :assignments |
'''has_many''' :assignments |
||
has_many :programmers, :through => :assignments |
'''has_many''' :programmers, ''':through''' => :assignments |
||
end |
end |
||
Line 140: | Line 140: | ||
class Programmer < ActiveRecord::Base |
class Programmer < ActiveRecord::Base |
||
has_and_belongs_to_many :projects # foreign keys in the join table |
'''has_and_belongs_to_many''' :projects # foreign keys in the join table |
||
end |
end |
||
class Project < ActiveRecord::Base |
class Project < ActiveRecord::Base |
||
has_and_belongs_to_many :programmers # foreign keys in the join table |
'''has_and_belongs_to_many''' :programmers # foreign keys in the join table |
||
end |
end |
||
Revision as of 18:45, 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