ActiveRecord Query Interface

41
ActiveRecord Query Interface 3.0

Transcript of ActiveRecord Query Interface

Page 1: ActiveRecord Query Interface

ActiveRecord Query Interface 3.0

Page 2: ActiveRecord Query Interface

@tim_keller

Page 3: ActiveRecord Query Interface

Consultant at innoQ

Page 4: ActiveRecord Query Interface

OK. Let's Go!

Page 5: ActiveRecord Query Interface

In a Nutshell

Page 6: ActiveRecord Query Interface

The new AR Query Interface is:

Page 7: ActiveRecord Query Interface

Tasty!

Page 8: ActiveRecord Query Interface

That was it.

Page 9: ActiveRecord Query Interface

Just kidding!

Page 10: ActiveRecord Query Interface

Preamble

Page 11: ActiveRecord Query Interface

The new Query Interface is build on top of:

Page 12: ActiveRecord Query Interface

Active Relation

Page 13: ActiveRecord Query Interface

A GoogleSummerOfCode-Project that:

Page 14: ActiveRecord Query Interface

„...integrate Arel into the existing implementation of ActiveRecord...“

http://socghop.appspot.com/gsoc/student_project/show/google/gsoc2009/rails/t124025364581

Page 15: ActiveRecord Query Interface

„Arel is a Relational Algebra for Ruby“

http://github.com/rails/arel

Page 16: ActiveRecord Query Interface

And simplifies the generation of complex SQL queries

Page 17: ActiveRecord Query Interface

Show me some code!

Page 18: ActiveRecord Query Interface

Caution!

Page 19: ActiveRecord Query Interface

The „old“ ActiveRecord Query Interface will be deprecated in Rails 3.1 and fully removed in Rails 3.2!

Page 20: ActiveRecord Query Interface

The „options hash“ for ActiveRecord class methods is now deprecated

Page 21: ActiveRecord Query Interface

MyClass.find(:first) and MyClass.find(:last) are also

deprecated

Page 22: ActiveRecord Query Interface

Example (deprecated)

● Owner.find(:first)

● Owner.find(:first, :conditions => {:name => 'test'})

But that is OK:● Owner.find(1)

● Owner.find(1,2)

Page 23: ActiveRecord Query Interface

The „options hash“ for the Scope stuff is also deprecated

Page 24: ActiveRecord Query Interface

Example (deprecated)

● named_scope :red, :conditions => { :colour => 'red' }

● default_scope :order => 'last_name'

Page 25: ActiveRecord Query Interface

„named_scope“ is deprecated in Rails 3.0. Just use „scope“

Page 26: ActiveRecord Query Interface

The New Shit!

Page 27: ActiveRecord Query Interface

New finder methods

Page 28: ActiveRecord Query Interface

Example (New API)

● where

● having

● select

● group

● order

● limit

● offset

● joins

● includes

● lock

● readonly

● from

Page 29: ActiveRecord Query Interface

The return value is a ActiveRecord::Relation

Page 30: ActiveRecord Query Interface

Relations are lazy loaded!

Page 31: ActiveRecord Query Interface

Example

● Rails 2● Owner.find(:first, :conditions => {:name => 'test'})

● Rails 3● Owner.where(:name => 'test')● with DB-Query

– Owner.where(:name => 'test').each{ |o| puts o.name }

Page 32: ActiveRecord Query Interface

For Eager Loading use all(), first(), last()

Page 33: ActiveRecord Query Interface

Example

● Rails 2● Owner.find(:first, :conditions => {:name => 'test'})

● Rails 3● Owner.where(:name => 'test').first

Page 34: ActiveRecord Query Interface

Relations are chainable and „shareable“

Page 35: ActiveRecord Query Interface

Example

● Rails 3@books = Book.order(params[:order))

@published_books = @books.where(:published => true)

@unpublished_books = @books.where(:published => false)

Page 36: ActiveRecord Query Interface

Example

● Rails 2● Book.find(:all, :conditions => ["price <= ?", 10], :include => :authors)

● Rails 3● Book.where("price <= ?",10).includes(:authors)

Page 37: ActiveRecord Query Interface

named_scope => scope

Page 38: ActiveRecord Query Interface

Example

● Rails 2● named_scope :red, :conditions => { :colour => 'red' }

● Rails 3.0● scope :red, :conditions => { :colour => 'red' }

● Rails 3.2● scope :red, where(:colour => 'red')

Page 39: ActiveRecord Query Interface

Sources

● m.onkey.org/2010/1/22/active-record-query-interface

● magicscalingsprinkles.wordpress.com/2010/01/28/why-i-wrote-arel/

● edgeapi.rubyonrails.org/● slideshare.net/GreggPollack/rails-3-beautiful-

code-3219240● flickr.com/photos/fofurasfelinas/2502823019/siz

es/o/

Page 40: ActiveRecord Query Interface

Sources

● flickr.com/photos/timcaynes/148110505/● flickr.com/photos/gurana/3831997459/sizes/m/

Page 41: ActiveRecord Query Interface

My two cents. Thank you!