Date post: | 04-Jul-2015 |
Category: |
Technology |
Upload: | hannah-howard |
View: | 96 times |
Download: | 2 times |
Data Modeling WITH ACTIVE RECORD IN RAILS
About Me:
Hannah HowardTwitter: @techgirlwonderEmail: [email protected]
I run my own computer services business called Tech Girl Wonder. And I’m 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, I’m skipping over a lot. Possibly even saying things that aren’t 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 I’ve 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 ApplicationsWeb ApplicationsWeb Applications
Static Web Sites
Server
Give me a page!
Here’s a page!
Client
Static web page: is delivered to the user exactly as stored.
Web APPLICATION
Information
Presented To The User
Data Retrieved From The
Model
Model Of Data
Represented 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 Bob’s 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
AcTIVERECORDCheese Typesclass CheeseType < ActiveRecord::Base has_many :cheeses has_and_belongs_to_many :cheese_stores attr_accessible :name, :countryend
Cheesesclass Cheese < ActiveRecord::Base belongs_to :cheese_type belongs_to :cheese_store attr_accessible :weight, :staleend
Cheese Storesclass CheeseStore < ActiveRecord::Base has_many :cheeses has_and_belongs_to_many :cheese_types attr_accessible :name, :addressend
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: Migrations
rails 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 endend
Oh wait, so that’s what rake db:migrate does!
Are You READY TO START PROGRAMMING?
rb-tunes
Our Project:
iTunes
Lets Start Making It!
Tracks
Albums
Artists
Playlists