際際滷

際際滷Share a Scribd company logo
Data Modeling WITH ACTIVE
RECORD IN RAILS
About Me:
Hannah Howard
Twitter: @techgirlwonder
Email: hannah@techgirlwonder.com
I run my own computer services business called
Tech Girl Wonder.And Im hiring.
I do ruby programming with Logical Reality Design,
a Rails development shop. Hire us!
 This is my take on the subject, not the one true way.
 For the smarty pants in the room, Im skipping over a lot.
Possibly even saying things that arent always true.
 There will be time for questions.
 This is not a lecture, only the first 15-30 minutes are.
A Few CAVEATS
Why This Talk?
 I think Ive noticed some patterns in where new people get
stuck learning Rails
 I think it has to do with the parts of Rails that are closer to
traditional computer programming and very different from
HTML/CSS
 Specifically, I think people get stuck on the M in the MVC,
i.e ActiveRecord and its connection to an SQL database.
STATIC WebSites
VS
Web Applications
Web Applications
Web Applications
Static Web Sites
Server
Give me a
page!
Heres a
page!
Client
Static web page: is delivered
to the user exactly as stored.
Web APPLICATION
Informatio
n
Presented
To The
User
Data
Retrieved
From The
Model
Model Of
Data
Represent
ed by App
List of
changes
sent to
the model
Interface
For
Receiving
Input
ServerClient View Controller
Gives Input
Sees Results
WHAT IS THE MODEL?
 A model of data represented by the application
 Rails stores its data in a relational database. (usually)
 You access data in relational databases with SQL queries
 SQL queries are complex and hard to write
 ActiveRecord is there to make that easier and better
What is A RELATIONAL
DATABASE?
 A series of data tables (like Excel spreadsheets) that are
connected to each other through relationships
 Hint: Spend some time with Filemaker or Access
RelationAL Database Example
Id Weight Stale
1 6oz TRUE
2 8oz FALSE
3 5oz FALSE
Id Name Country
1 Swiss Switzerland
2 American U.S.
3 Harvarty Denmark
Id Name Address
1 Cheesetopia 123 Fake St.
2 I Love Cheese 8675 Threeonine Ave.
3 Bobs Cheeses 1 Infinite Loop
Cheese Types
Cheeses
Cheese Shops
Id Weight Stale TypeID ShopID
1 6oz TRUE 1 2
2 8oz FALSE 3 3
3 5oz FALSE 2 1
Have
Many Have
Many
Have
Many
Have
Many
Belongs
To
Belongs
To
TypeID ShopID
3 2
1 2
2 1
1 1
3 3
2 3
SQL: Standard Query Lanaguage
SELECT * FROM CHEESES
INNER JOIN
CHEESE_TYPES ON
cheeses.cheese_type_id =
cheese_types.id WHERE
cheese_types.name IN
[SWISS,HARVARTI]
WHERE cheeses.stale =
FALSE
AcTIVERECORD
Cheese Types
class CheeseType < ActiveRecord::Base
has_many :cheeses
has_and_belongs_to_many :cheese_stores
attr_accessible :name, :country
end
Cheeses
class Cheese < ActiveRecord::Base
belongs_to :cheese_type
belongs_to :cheese_store
attr_accessible :weight, :stale
end
Cheese Stores
class CheeseStore < ActiveRecord::Base
has_many :cheeses
has_and_belongs_to_many :cheese_types
attr_accessible :name, :address
WoRKING WITH ACTIVE
RECORD
cheese_type.country = France
cheese.cheese_store
cheese_store.cheese_types
Cheese.where(:weight => 4.0..10.0)
Cheese.joins(:cheese_types).where(cheese_types: {name:
[SWISS,HAVARTI]}).where(:stale => false)
The KEY PIECE OF GLUE:
Migrationsrails generate model cheeses weight:decimal stale:boolean cheese_type_id:integer
cheese_store_id:integer
class CreateCheeses < ActiveRecord::Migration
def change
create_table :cheeses do |t|
t.decimal :weight
t.boolean :stale
t.integer :cheese_type_id
t.integer :cheese_store_id
t.timestamps
end
end
end
Oh wait, so thats what rake db:migrate does!
Are You READY TO START
PROGRAMMING?
rb-tunes
Our Project:
iTunes
Lets Start Making It!
Tracks
Albums
Artists
Playlists

More Related Content

Active Record Data Modeling

  • 1. Data Modeling WITH ACTIVE RECORD IN RAILS
  • 2. About Me: Hannah Howard Twitter: @techgirlwonder Email: hannah@techgirlwonder.com I run my own computer services business called Tech Girl Wonder.And Im hiring. I do ruby programming with Logical Reality Design, a Rails development shop. Hire us!
  • 3. This is my take on the subject, not the one true way. For the smarty pants in the room, Im skipping over a lot. Possibly even saying things that arent always true. There will be time for questions. This is not a lecture, only the first 15-30 minutes are. A Few CAVEATS
  • 4. Why This Talk? I think Ive noticed some patterns in where new people get stuck learning Rails I think it has to do with the parts of Rails that are closer to traditional computer programming and very different from HTML/CSS Specifically, I think people get stuck on the M in the MVC, i.e ActiveRecord and its connection to an SQL database.
  • 5. STATIC WebSites VS Web Applications Web Applications Web Applications
  • 6. Static Web Sites Server Give me a page! Heres a page! Client Static web page: is delivered to the user exactly as stored.
  • 7. Web APPLICATION Informatio n Presented To The User Data Retrieved From The Model Model Of Data Represent ed by App List of changes sent to the model Interface For Receiving Input ServerClient View Controller Gives Input Sees Results
  • 8. WHAT IS THE MODEL? A model of data represented by the application Rails stores its data in a relational database. (usually) You access data in relational databases with SQL queries SQL queries are complex and hard to write ActiveRecord is there to make that easier and better
  • 9. What is A RELATIONAL DATABASE? A series of data tables (like Excel spreadsheets) that are connected to each other through relationships Hint: Spend some time with Filemaker or Access
  • 10. RelationAL Database Example Id Weight Stale 1 6oz TRUE 2 8oz FALSE 3 5oz FALSE Id Name Country 1 Swiss Switzerland 2 American U.S. 3 Harvarty Denmark Id Name Address 1 Cheesetopia 123 Fake St. 2 I Love Cheese 8675 Threeonine Ave. 3 Bobs Cheeses 1 Infinite Loop Cheese Types Cheeses Cheese Shops Id Weight Stale TypeID ShopID 1 6oz TRUE 1 2 2 8oz FALSE 3 3 3 5oz FALSE 2 1 Have Many Have Many Have Many Have Many Belongs To Belongs To TypeID ShopID 3 2 1 2 2 1 1 1 3 3 2 3
  • 11. SQL: Standard Query Lanaguage SELECT * FROM CHEESES INNER JOIN CHEESE_TYPES ON cheeses.cheese_type_id = cheese_types.id WHERE cheese_types.name IN [SWISS,HARVARTI] WHERE cheeses.stale = FALSE
  • 12. AcTIVERECORD Cheese Types class CheeseType < ActiveRecord::Base has_many :cheeses has_and_belongs_to_many :cheese_stores attr_accessible :name, :country end Cheeses class Cheese < ActiveRecord::Base belongs_to :cheese_type belongs_to :cheese_store attr_accessible :weight, :stale end Cheese Stores class CheeseStore < ActiveRecord::Base has_many :cheeses has_and_belongs_to_many :cheese_types attr_accessible :name, :address
  • 13. WoRKING WITH ACTIVE RECORD cheese_type.country = France cheese.cheese_store cheese_store.cheese_types Cheese.where(:weight => 4.0..10.0) Cheese.joins(:cheese_types).where(cheese_types: {name: [SWISS,HAVARTI]}).where(:stale => false)
  • 14. The KEY PIECE OF GLUE: Migrationsrails generate model cheeses weight:decimal stale:boolean cheese_type_id:integer cheese_store_id:integer class CreateCheeses < ActiveRecord::Migration def change create_table :cheeses do |t| t.decimal :weight t.boolean :stale t.integer :cheese_type_id t.integer :cheese_store_id t.timestamps end end end Oh wait, so thats what rake db:migrate does!
  • 15. Are You READY TO START PROGRAMMING?
  • 17. Lets Start Making It! Tracks Albums Artists Playlists