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

1,181 views

Published on

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/

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,181
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. MetaWhereStéroïdes pour ActiveRecord
  2. 2. Exemple de modèle User AccountCategory 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’huiPost.where(:date => Date.today)
  6. 6. Quel problème ?Je veux les Posts d’aujourd’huiPost.where(:date => Date.today)Je veux les Posts des 7 derniers jours
  7. 7. Quel problème ?Je veux les Posts d’aujourd’huiPost.where(:date => Date.today)Je veux les Posts des 7 derniers joursPost.where(“date >= #{Date.today - 1.week}“)
  8. 8. Quel problème ?Je veux les Posts d’aujourd’huiPost.where(:date => Date.today)Je veux les Posts des 7 derniers joursPost.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#1337Post.where(“user_id = 42 OR user_id = 1337“)
  12. 12. Quel problème ?Posts de User#42 ou de User#1337Post.where(“user_id = 42 OR user_id = 1337“)
  13. 13. Quel problème ?Posts de User#42 ou de User#1337Post.where(“user_id = 42 OR user_id = 1337“)Posts des utilisateurs ayant un compte créé il ya plus de 3 mois
  14. 14. Quel problème ?Posts de User#42 ou de User#1337Post.where(“user_id = 42 OR user_id = 1337“)Posts des utilisateurs ayant un compte créé il ya plus de 3 moisPost.joins(:something).where(“...“)
  15. 15. Quel problème ?Posts de User#42 ou de User#1337Post.where(“user_id = 42 OR user_id = 1337“)Posts des utilisateurs ayant un compte créé il ya plus de 3 moisPost.joins(:something).where(“...“)
  16. 16. Utiliser ActiveRecord => écrire du SQL
  17. 17. Utiliser ActiveRecord => écrire du SQL
  18. 18. MetaWherehttp://erniemiller.org/projects/metawhere/https://github.com/ernie/meta_wherehttps://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 joinsJoins avec ActiveRecord ?
  23. 23. Simplification du joinsJoins avec ActiveRecord ?
  24. 24. Simplification du joinsJoins 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 ^ nilMéthodes pour order et joins également joins(:accounts.outer) order(:created_at.desc)
  26. 26. Amusons nousComment .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. MetaWhereMerci de votre attention. Questions ?

×