Successfully reported this slideshow.

MetaWhere at the Ruby Drink-up of Sophia, October 2011

0

Share

Loading in …3
×
1 of 27
1 of 27

MetaWhere at the Ruby Drink-up of Sophia, October 2011

0

Share

Download to read offline

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/

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/

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

MetaWhere at the Ruby Drink-up of Sophia, October 2011

  1. 1. MetaWhere Stéroïdes pour ActiveRecord
  2. 2. Exemple de modèle User Account Category Post Comment
  3. 3. Quel problème ?
  4. 4. Quel problème ? Je veux les Posts d’aujourd’hui
  5. 5. Quel problème ? Je veux les Posts d’aujourd’hui Post.where(:date => Date.today)
  6. 6. Quel problème ? Je veux les Posts d’aujourd’hui Post.where(:date => Date.today) Je veux les Posts des 7 derniers jours
  7. 7. 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}“)
  8. 8. 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}“)
  9. 9. Quel problème ?
  10. 10. Quel problème ? Posts de User#42 ou de User#1337
  11. 11. Quel problème ? Posts de User#42 ou de User#1337 Post.where(“user_id = 42 OR user_id = 1337“)
  12. 12. Quel problème ? Posts de User#42 ou de User#1337 Post.where(“user_id = 42 OR user_id = 1337“)
  13. 13. 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
  14. 14. 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(“...“)
  15. 15. 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(“...“)
  16. 16. Utiliser ActiveRecord => écrire du SQL
  17. 17. Utiliser ActiveRecord => écrire du SQL
  18. 18. MetaWhere http://erniemiller.org/projects/metawhere/ https://github.com/ernie/meta_where https://github.com/ernie/squeel
  19. 19. Méthodes sur les Symbols Post.where(:date.gte => Date.today-1.week) Comment.where(:rating.ne => nil) Category.where(:name.in => [‘Ruby’, ‘Rails’])
  20. 20. Surcharge du | pour Hash Post.where({:user_id => 42} | {:user_id => 1337}) User.where({:name.ne => ‘Bob’} | {:admin => true})
  21. 21. Simplification du joins
  22. 22. Simplification du joins Joins avec ActiveRecord ?
  23. 23. Simplification du joins Joins avec ActiveRecord ?
  24. 24. Simplification du joins Joins avec ActiveRecord ? MetaWhere: Post.joins(:user => :accounts).where( :user => { :accounts => { :created_at.lte => Date.today - 3.months } })
  25. 25. 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)
  26. 26. 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})
  27. 27. MetaWhere Merci de votre attention. Questions ?

×