Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rails Magic Exposed
Search
Jesse Wolgamott
August 11, 2012
Programming
2.5k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rails Magic Exposed
The Ruby that powers Rails.. LoneStarRubyConf 2012
Jesse Wolgamott
August 11, 2012
More Decks by Jesse Wolgamott
See All by Jesse Wolgamott
React vs React-Native
jwo
0
160
What is an API
jwo
0
230
DIY Rails Authentication
jwo
0
250
ActionCable - For Not Another Chat App
jwo
3
1.8k
SlackBot.rb - Create You a Slack Bot
jwo
1
1.5k
react-rails: an isomorphic match made in heaven
jwo
0
1.4k
Docker - next big thing
jwo
0
1k
Ruby 2.1 Overview
jwo
0
1.1k
Rails 4: Appetizers
jwo
1
1.1k
Other Decks in Programming
See All in Programming
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
220
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.7k
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
240
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
490
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
260
プロポーザルを書いてもらう
pvcresin
0
510
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
930
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
400
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
520
VibeCodingからAgenticWorkflowへ
starfish719
0
460
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
430
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
Featured
See All Featured
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
460
VelocityConf: Rendering Performance Case Studies
addyosmani
332
25k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
410
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
GraphQLとの向き合い方2022年版
quramy
50
15k
Unsuck your backbone
ammeep
672
58k
Faster Mobile Websites
deanohume
310
32k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
540
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
240
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Transcript
Rails magic Saturday, August 11, 12
EPFT NBHJD FYJTU Saturday, August 11, 12
MFU`TBTL 4$*&/$& Saturday, August 11, 12
(PPHMF 3FTVMUT Saturday, August 11, 12
Framework Magic Total php (1994) 132000 2.527E+10 java (1995) 45900
960000000 .net (2002) 4400 250000000 django (2004) 9370 44300000 rails (2005) 7040 20300000 Saturday, August 11, 12
.BHJD3BUJP w1)1 w+BWB w/&5 Saturday, August 11, 12
.BHJD3BUJP w%KBOHP w3BJMT Saturday, August 11, 12
0 1 2 3 4 php (1994) java (1995) .net
(2002) django (2004) rails (2005) 0.052 0.478 0.176 2.115 3.468 Magic over Time Frequency / 10000 Saturday, August 11, 12
0 1 2 3 4 php (1994) java (1995) .net
(2002) django (2004) rails (2005) Node 0.052 0.478 0.176 2.115 3.468 2.031 A Step Back Saturday, August 11, 12
0 100 200 300 400 php (1994) .net (2002) rails
(2005) Meteor.js 0.052 0.478 0.176 2.115 3.468 2.031 345.810 MAGIC of Meteor Saturday, August 11, 12
l"OZTVGpDJFOUMZ BEWBODFE UFDIOPMPHZJT JOEJTUJOHVJTIBCMF GSPNNBHJDz "SUIVS$$MBSL Saturday, August 11, 12
dynamic finders Saturday, August 11, 12
id = params[:customer_id] YourModel.find_by_customer_id id Saturday, August 11, 12
def method_missing(method_id, *arguments) if match = /find_(all_by|by)_([_a-zA-Z]\w*)/. match(method_id.to_s) # find...
elsif match = /find_or_create_by_([_a-zA-Z] \w*)/. match(method_id.to_s) # find_or_create... else super end end Saturday, August 11, 12
magic columns Saturday, August 11, 12
created_at and updated_at counter_caches type Saturday, August 11, 12
def apply_it(items) items.map do |item| item.apply! if item.respond_to? (:apply!) end
end Saturday, August 11, 12
Active Record definition Saturday, August 11, 12
class User < ActiveRecord::Base has_many :posts has_many :comments, through: :posts
validates_presence_of :email end Saturday, August 11, 12
class SuperWo 20.times {|i| puts "This is the #{i}”} def
wat! puts "hi" end end SuperWo.new.wat! Try it out: http://rubyfiddle.com/riddles/a63dd Saturday, August 11, 12
auto loading Saturday, August 11, 12
Dir.glob('./app/models/*').each do |file| require file end require_relative 'db/setup' require_relative 'models/page'
require_relative 'models/book' Saturday, August 11, 12
CFDBVTF "DUJWF4VQQPSU %FQFOEFODJFT VSM IUUQSLIJN DPEFSFMPBEJOH Saturday, August 11, 12
# Extremely simple autoloading implementation class Module alias const_missing_without_autoloading const_missing
def const_missing(const) path = “./#{name.gsub('::', '/')}/#{const}" path.gsub!(/([a-z\d])([A-Z])/,'\1_\2') require path.downcase const_defined?(const) ? const_get(const) : super rescue LoadError => error warn(error.message) super end end Saturday, August 11, 12
"VUP-PBEJO"DUJPO HJUIVCKXP DMPBLFEUZSJPO Saturday, August 11, 12
4PNVDINPSF Saturday, August 11, 12
class Foo @@foo ||= 42 puts @@foo # 42 end
# reload... class Foo @@foo ||= 23 puts @@foo # 42 end Saturday, August 11, 12
# reload... Object.send(:remove_const, :Foo) class Foo @@foo ||= 23 puts
@@foo # 23 end Saturday, August 11, 12
custom ruby Saturday, August 11, 12
NPOLFZQBUDIJOH Saturday, August 11, 12
numbers = (1..100).to_a numbers.first numbers.last numbers.forty_two Saturday, August 11, 12
def forty_two self[41] end "MTPLOPXOBTBDDFTTJOHUIF SFEEJU Saturday, August 11, 12
class Enumerable def standard_dev Math.sqrt(sample_variance) end def sample_variance mean =
sum.to_f / size.to_f sum{|i| (i-mean)**2} / size end end Saturday, August 11, 12
review Saturday, August 11, 12
EZOBNJD@pOEFST NFUIPE@NJTTJOH Saturday, August 11, 12
NBHJD@DPMVNOT SFTQPOE@UP Saturday, August 11, 12
BS@EFpOJUJPOT DPNQJMF@UJNF@DPEF Saturday, August 11, 12
BVUP@MPBEJOH DPOTU@NJTTJOH Saturday, August 11, 12
NPOLFZ@QBUDIJOH PQFO@DMBTTFT Saturday, August 11, 12
@@jwo ruby off rails Saturday, August 11, 12