Skip to content

Instantly share code, notes, and snippets.

@fdutey
Created February 19, 2009 12:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fdutey/66897 to your computer and use it in GitHub Desktop.
Save fdutey/66897 to your computer and use it in GitHub Desktop.
posts = Post.all #=> 3 posts, 2 publiés, un non
#indique si TOUS les éléments d'un enumerable obéissent à une condition passée sous forme de bloc
posts.all?{ |post| post.published? } #=> false
#indique si au moins 1 élement de la collection obéit à une condition passée sous forme de bloc
posts.any?{ |post| post.published? } #=> true
#renvoie un tableau contenant la valeur renvoyée par un bloc pour chaque élément de la collection
posts.collect{ |post| post.published? } #=> [true, true, false]
posts.map{ |post| post.published? } #=> [true, true, false]
#retourne le premier element de la collection qui satisfait la condition passée sous forme de bloc
posts.detect{ |post| post.published? } #=> #<Post ...>
posts.find{ |post| post.published? } #=> #<Post ...>
#très pratique pour éviter de faire un for comme à l'ancien temps, avec les langages diaboliques
posts.each_with_index do |post, index|
post.update_attribute(:position, index + 1) #=> pratique pour la réception d'un drag & drop par exemple
end
#renvoie un tableau contenant la liste de tous les items satisfaisant la conditions passée sous forme de bloc
posts.find_all{ |post| post.published? } #=> [#<Post ...>, #<Post ...>]
posts.select{ |post| post.published? } #=> [#<Post ...>, #<Post ...>]
#indique si une collection contient un élément précis
posts.include?(Post.find(1)) #=> true
posts.member?(Post.find(1)) #=> true
#insère dans un accumulateur le résultat d'un block appliqué sur chaque élément d'une collection
(1..3).inject(0){ |total, number| total + number } #=> 6
posts.inject([]){ |memo, post| memo << post.published? } #=> [true, true, false]
#extrait la valeur minimum / maximum d'un tableau
#par défaut, la méthode de comparaison utilisée est <=> mais vous pouvez donner un bloc pour en utiliser une autre
#Il peut être intéressant de définir la méthod <=> dans vos objets ActiveRecord pour avoir un ordre de tri par défaut
posts.min{ |post_1, post_2| post_1.created_at <=> post_2.created_at } #=> #<Post ...>
posts.max{ |post_1, post_2| post_1.created_at <=> post_2.created_at } #=> #<Post ...>
#Inverse de select, renvoie un tableau contenant la liste des objets pour lesquels la condition passée sous forme de bloc est fausse
posts.reject{ |post| post.published? } #=> [#<Post ...>]
#ordonne les élements d'une collection
#par défaut la méthode de comparaison utilisée est <=> mais vous pouvez donner un bloc pour en utiliser une autre
posts.sort #=> [#<Post...>, #<Post ...>, #<Post ...>]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment