第1页
Row => Ruby Object
Explore ActiveRecord Source Code
第2页
Me
第3页
陈恺
已婚已育的程序员
第4页
Work at SmartLion
Team Lead
第5页
• @_kaichen at Twitter • @kaichen at Github • kai@thekaiway.com
第6页
Agenda
第7页
Talk is cheap, show me the code.
- Linus Torvalds
第8页
Tell you(我跟你讲啊)
• Think More • Show some Respect • English Reading from Nice Doc Comment • Help you debug
第9页
Manner
• Give you a Overview First • Show you the way of thinking • Show you the Skills • Guide you dig down code
第10页
Content
• Database • Rails • Trace Ruby Code • ActiveRecord • Sample • Q&A
第11页
Target
• Junior Rails Developers • 2+ years
第12页
Goal
• Learn Internal of ActiveRecord • Interest about Computer Science
第13页
Find Out Together
Read and Make Fun Together, and I don’t have idea how long of this workshop
第15页
Database
第16页
Database
• Relation • SQL • Runtime Model • IO Model/Storage
第17页
Relational
第18页
Relational
第19页
Relational
第20页
SQL
第21页
SQL
• SELECT * FROM users WHERE users.id = 1 limit 1; • INSERT INTO users (name, email) VALUES (‘kai’,
‘kai@thekaiway.com’); • UPDATE users SET age = age + 1; • DETELE FROM users WHERE email =
‘kai@thekaiway.com’;
第22页
Runtime
• Serverless • Multi-Threads • Multi-Processes
第23页
Memory Management & I/O
• Memory • Save to Disk
第24页
Rails
第25页
Ruby on Rails
Full Stack Web Framework
第26页
Rails
ActionView
ActionMailer ActiveModel
ActionPack ActiveRecord
ActiveSupport
第27页
Rails
ActiveRecord
ActiveModel
ActionMailer
ActionPack
ActionView
Sprockets
ActiveSupport
第28页
Follow Rails Changes
• https://github.com/rails/rails • USING Git!!!
第29页
Trace Ruby Code
第30页
Trace Ruby Code
• Search Source Code • Debug in Runtime • Proof in Sample/Production Project
第31页
Searching Source Code
• Grep - http://www.gnu.org/software/grep/ • Ack - https://github.com/petdance/ack2 • Ag - https://github.com/ggreer/the_silver_searcher • Pt - https://github.com/monochromegane/
the_platinum_searcher
第32页
Runtime Debugging
• puts / inspect • pry • Raise Error
第33页
Sample - Live Coding
第34页
New Rules
第35页
No more magic
第36页
Less Dynamic Method Define
第37页
No code faster than code.
–Jeff Atwood
第38页
ActiveRecord
第39页
The Pattern
From Martin Fowler’s 「Patterns of Enterprise Application Architecture」
第40页
ActiveRecord Pattern
• Database Row presents as an Ruby Object • Class maps to a Table • Instance maps to a row • CRUD on an Instance perform SQL Query
第41页
Features
Migration
Column Value Typecasting
Association Identity Map
Schema Dump Fixtures
Prepare Statement
Connection Pool Query Cache
Connection Reaper
Timestamp
DDL Generation Session Store
Transaction STI Lock
Query Explain
Enum Column SQL Sanitization
Statement Cache
Callbacks Validations
第42页
Let’s Start
Using Rails 4.2.0.beta1
第43页
Base Structure
Live!!!
第44页
Code Structure
• Under Rails activerecord dir • Read ruby gem spec • Explore lib dir
第45页
Database Connection
第46页
Database Connection
• Connection Pool • Reap • Query Cache • Transaction
第47页
Connection Pool
• Multi-Thread
第48页
Schema
第49页
Schema
• db/schema.rb • Column-Attribute Mapping
第50页
Assemble Object
第51页
ActiveRecord Object
• Create Manually • Create from Query
第52页
States
• Schema • Attributes • Is New Record? • Did it Destroy? • Errors from validation
第53页
SQL
第54页
SQL
• Arel • DDL
第55页
Arel
第56页
Arel
第57页
Arel
第58页
Arel
第59页
Model Association
第60页
Model Association
• belongs_to • has_many • has_one • has_and_blongs_to_many
第61页
Living Coding
• Trace Migration • Find out how Migration works
第62页
How to keep learning
第64页
Recruit
第65页
Recruit
• Rails Developers x 2 • iOS/Android Developers x 2 • Product Manager x 1 • UI Designer x1
第66页
END