Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
2.4k
Rails Magic Exposed
The Ruby that powers Rails.. LoneStarRubyConf 2012
Jesse Wolgamott
August 11, 2012
Tweet
Share
More Decks by Jesse Wolgamott
See All by Jesse Wolgamott
React vs React-Native
jwo
0
130
What is an API
jwo
0
200
DIY Rails Authentication
jwo
0
210
ActionCable - For Not Another Chat App
jwo
3
1.7k
SlackBot.rb - Create You a Slack Bot
jwo
1
1.4k
react-rails: an isomorphic match made in heaven
jwo
0
1.3k
Docker - next big thing
jwo
0
960
Ruby 2.1 Overview
jwo
0
980
Rails 4: Appetizers
jwo
1
990
Other Decks in Programming
See All in Programming
分散DBって何者なんだ... Spannerから学ぶRDBとの違い
iwashi623
0
140
データファイルをAWSのDWHサービスに格納する / 20251115jawsug-tochigi
kasacchiful
2
100
GraalVM Native Image トラブルシューティング機能の最新状況(2025年版)
ntt_dsol_java
0
170
Evolving NEWT’s TypeScript Backend for the AI-Driven Era
xpromx
0
210
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
3
11k
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
techtver
PRO
3
1.3k
connect-python: convenient protobuf RPC for Python
anuraaga
0
310
仕様がそのままテストになる!Javaで始める振る舞い駆動開発
ohmori_yusuke
8
4.7k
モダンJSフレームワークのビルドプロセス 〜なぜReactは503行、Svelteは12行なのか〜
fuuki12
0
150
OSS開発者の憂鬱
yusukebe
15
12k
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
5
2.7k
Feature Flags Suck! - KubeCon Atlanta 2025
phodgson
1
190
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
The Language of Interfaces
destraynor
162
25k
Statistics for Hackers
jakevdp
799
230k
For a Future-Friendly Web
brad_frost
180
10k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Become a Pro
speakerdeck
PRO
30
5.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
The Invisible Side of Design
smashingmag
302
51k
Producing Creativity
orderedlist
PRO
348
40k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
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