Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
MetaWhereStéroïdes pour ActiveRecord
Exemple de modèle            User     AccountCategory    Post           Comment
Quel problème ?
Quel problème ?Je veux les Posts d’aujourd’hui
Quel problème ?Je veux les Posts d’aujourd’huiPost.where(:date => Date.today)
Quel problème ?Je veux les Posts d’aujourd’huiPost.where(:date => Date.today)Je veux les Posts des 7 derniers jours
Quel problème ?Je veux les Posts d’aujourd’huiPost.where(:date => Date.today)Je veux les Posts des 7 derniers joursPost.wh...
Quel problème ?Je veux les Posts d’aujourd’huiPost.where(:date => Date.today)Je veux les Posts des 7 derniers joursPost.wh...
Quel problème ?
Quel problème ?Posts de User#42 ou de User#1337
Quel problème ?Posts de User#42 ou de User#1337Post.where(“user_id = 42 OR user_id = 1337“)
Quel problème ?Posts de User#42 ou de User#1337Post.where(“user_id = 42 OR user_id = 1337“)
Quel problème ?Posts de User#42 ou de User#1337Post.where(“user_id = 42 OR user_id = 1337“)Posts des utilisateurs ayant un...
Quel problème ?Posts de User#42 ou de User#1337Post.where(“user_id = 42 OR user_id = 1337“)Posts des utilisateurs ayant un...
Quel problème ?Posts de User#42 ou de User#1337Post.where(“user_id = 42 OR user_id = 1337“)Posts des utilisateurs ayant un...
Utiliser ActiveRecord =>      écrire du SQL
Utiliser ActiveRecord =>      écrire du SQL
MetaWherehttp://erniemiller.org/projects/metawhere/https://github.com/ernie/meta_wherehttps://github.com/ernie/squeel
Méthodes sur les Symbols  Post.where(:date.gte => Date.today-1.week)  Comment.where(:rating.ne => nil)  Category.where(:na...
Surcharge du | pour Hash  Post.where({:user_id => 42} | {:user_id => 1337})  User.where({:name.ne => ‘Bob’} | {:admin => t...
Simplification du joins
Simplification du joinsJoins avec ActiveRecord ?
Simplification du joinsJoins avec ActiveRecord ?
Simplification du joinsJoins avec ActiveRecord ?MetaWhere:Post.joins(:user => :accounts).where(:user => {   :accounts => { ...
Plus loin !Surcharge des opérateurs  :date >= Date.today  :value ^ nilMéthodes pour order et joins également  joins(:accou...
Amusons nousComment  .joins( :post => [:categories, :user])  where(:post => {:categories => :name.in => [‘A’, ‘B’]})  wher...
MetaWhereMerci de votre attention.      Questions ?
Upcoming SlideShare
Loading in …5
×

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

1,290 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
  • Be the first to comment

  • Be the first to like this

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 ?

×