metawhere at the ruby drink-up of sophia, october 2011
DESCRIPTION
ActiveRecord query syntax on steroids. Presented at the Ruby Drink-up of Sophia Antipolis on the 4th of October 2011 by Pierre Schambacher (@PierreSchambac). http://rivierarb.fr/2011/10/04/Drinkup/TRANSCRIPT
MetaWhereStéroïdes pour ActiveRecord
Exemple de modèle
User Account
PostCategory
Comment
Quel problème ?
Je veux les Posts d’aujourd’hui
Quel problème ?
Je veux les Posts d’aujourd’hui
Post.where(:date => Date.today)
Quel problème ?
Je veux les Posts d’aujourd’hui
Post.where(:date => Date.today)
Je veux les Posts des 7 derniers jours
Quel problème ?
Je veux les Posts d’aujourd’hui
Post.where(:date => Date.today)
Je veux les Posts des 7 derniers jours
Post.where(“date >= #{Date.today - 1.week}“)
Quel problème ?
Je veux les Posts d’aujourd’hui
Post.where(:date => Date.today)
Je veux les Posts des 7 derniers jours
Post.where(“date >= #{Date.today - 1.week}“)
Quel problème ?
Quel problème ?
Quel problème ?
Posts de User#42 ou de User#1337
Quel problème ?
Posts de User#42 ou de User#1337
Post.where(“user_id = 42 OR user_id = 1337“)
Quel problème ?
Posts de User#42 ou de User#1337
Post.where(“user_id = 42 OR user_id = 1337“)
Quel problème ?
Posts de User#42 ou de User#1337
Post.where(“user_id = 42 OR user_id = 1337“)
Posts des utilisateurs ayant un compte créé il y a plus de 3 mois
Quel problème ?
Posts de User#42 ou de User#1337
Post.where(“user_id = 42 OR user_id = 1337“)
Posts des utilisateurs ayant un compte créé il y a plus de 3 mois
Post.joins(:something).where(“...“)
Quel problème ?
Posts de User#42 ou de User#1337
Post.where(“user_id = 42 OR user_id = 1337“)
Posts des utilisateurs ayant un compte créé il y a plus de 3 mois
Post.joins(:something).where(“...“)
Utiliser ActiveRecord => écrire du SQL
Utiliser ActiveRecord => écrire du SQL
MetaWhere
http://erniemiller.org/projects/metawhere/
https://github.com/ernie/meta_where
https://github.com/ernie/squeel
Méthodes sur les Symbols
Post.where(:date.gte => Date.today-1.week)
Comment.where(:rating.ne => nil)
Category.where(:name.in => [‘Ruby’, ‘Rails’])
Surcharge du | pour Hash
Post.where({:user_id => 42} | {:user_id => 1337})
User.where({:name.ne => ‘Bob’} | {:admin => true})
Simplification du joins
Simplification du joins
Joins avec ActiveRecord ?
Simplification du joins
Joins avec ActiveRecord ?
Simplification du joins
Joins avec ActiveRecord ?
MetaWhere:
Post.joins(:user => :accounts).where(:user => { :accounts => { :created_at.lte => Date.today - 3.months }})
Plus loin !
Surcharge des opérateurs
:date >= Date.today
:value ^ nil
Méthodes pour order et joins également
joins(:accounts.outer)
order(:created_at.desc)
Amusons nous
Comment .joins( :post => [:categories, :user]) where(:post => {:categories => :name.in => [‘A’, ‘B’]}) where(:post => {:user => {:created_at.lte => Date.yesterday}}) where({:rating => 5} | {:rating => 0})
MetaWhereMerci de votre attention.
Questions ?