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
Introduction to Arel
Search
Bruno Sutic
October 28, 2014
Programming
1
220
Introduction to Arel
Arel fundamentals
Bruno Sutic
October 28, 2014
Tweet
Share
More Decks by Bruno Sutic
See All by Bruno Sutic
Readline + irb/pry = <3
brunosutic
0
120
Moreutils
brunosutic
0
45
The venerable "expect"
brunosutic
0
56
Capistrano vs Mina: Capistrano demo talk
brunosutic
0
440
Configuring tmux
brunosutic
0
74
Tmux osnove
brunosutic
0
170
Deploying Rails apps with Capistrano
brunosutic
0
83
Other Decks in Programming
See All in Programming
SwiftDataのカスタムデータストアを試してみた
1mash0
0
140
The New Developer Workflow: How AI Transforms Ideas into Code
danielsogl
0
100
Ruby on Railroad: The Power of Visualizing CFG
ydah
0
290
flutter_kaigi_mini_4.pdf
nobu74658
0
140
MCP調べてみました! / Exploring MCP
uhzz
2
2.3k
スモールスタートで始めるためのLambda×モノリス(Lambdalith)
akihisaikeda
2
330
ComposeでのPicture in Picture
takathemax
0
130
Browser and UI #2 HTML/ARIA
ken7253
2
170
eBPF超入門「o11yに使える」とは (20250424_eBPF_o11y)
thousanda
1
110
note の Elasticsearch 更新系を支える技術
tchov
9
3.4k
RubyKaigi Dev Meeting 2025
tenderlove
1
1.2k
fieldalignmentから見るGoの構造体
kuro_kurorrr
0
130
Featured
See All Featured
Designing for humans not robots
tammielis
253
25k
Why Our Code Smells
bkeepers
PRO
336
57k
Making Projects Easy
brettharned
116
6.2k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.5k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
690
How STYLIGHT went responsive
nonsquared
100
5.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.5k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
The Language of Interfaces
destraynor
157
25k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
820
Music & Morning Musume
bryan
47
6.5k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Transcript
Introduction to Arel
Bruno Sutic Rails & Javascript developer Ideal Project Group,
Chicago github.com/bruno- @brunosutic
What is Arel? • github.com/rails/arel • “Simplifies generation of complex
SQL” You write Ruby, out comes the SQL • dependency of ActiveRecord • can be used together with ActiveRecord
How I learned about Arel? • credit: Janko Marohnic •
used Arel to optimize a feature on a project
Demo to get you interested :)
Prerequisites for the examples • ‘Customer’ is an ActiveRecord model
• Arel api for a column: Customer.arel_table[:name] • A “convention”: class Customer def self.[](column) arel_table[column] end end Customer[:name]
Basic example • ActiveRecord Customer.where(name: variable) • Arel Customer.where(Customer[:name].eq(variable))
A bit more useful example • ActiveRecord Customer.joins(:sales) .where(“sales.price” =>
variable) or Customer.joins(:sales) .where(sales: { price: variable }) • Arel Customer.joins(:sales) .where(Sale[:price].eq(variable))
SQL comparisons example • ActiveRecord Customer.where(“credits > ?”, credits_variable) •
Arel Customer.where( Customer[:credits].gt(credits_variable) ) • All comparison operators: gt, lt, gteq, lteq
OR condition example • ActiveRecord Customer.where(“credits > ? OR credits
< ?”, var1, var2) • Arel Customer.where( Customer[:credits].gt(var1).or( Customer[:credits].lt(var2) ) )
Complex conditions example • ActiveRecord Customer.where( “credits > ? OR
(name = ? AND credits < ?)”, var1, var2, var3 ) • Arel Customer.where( Customer[:credits].gt(var1).or( Customer[:name].eq(var2).and( Customer[:credits].lt(var3) ) ) )
LIKE example • ActiveRecord Customer.where(“name LIKE ?”, “%#{variable}%”) • Arel
Customer.where(Customer[:name].matches(“%#{variable}%”))
Other features • support for all SQL ‘join’ types •
SQL literals • writing only a part of a bigger query as SQL • example: CASE statement
Benefits of using Arel • pure Ruby, nicer looking code
• proper code highlighting • ruby exceptions • completely avoids SQL injection
Arel resources • github repo: https://github.com/rails/arel • great speech: https://www.youtube.com/watch?v=ShPAxNcLm3o
• source code walkthrough: https://www.youtube.com/watch?v=EJ6b_2S9Ids • examples from this talk: https://gist.github.com/bruno-/5964403476c791331c49
Questions?