Il arrive souvent que l'on ai besoin que de certains champs lors de la récupération d'objets sérialisés en base de données.
Par exemple imaginons que nous ayons 10000 utilisateurs (avec email, adresse, nom, prenom, ...) et que nous souhaitons afficher la liste de ce qui ce sont inscrit depuis 2 mois, seul l'email nom et prénom nous intéresse.
On pourrait faire ceci :
User.where("created_at > ?", 2.months.ago).each{ |u|
# u est de la classe User
print [u.name, u.firstname, u.email].join(" ")
}
Avec valium on peut faire ça (et on a intérêt) :
User.where("created_at > ?", 2.months.ago)[:email, :name, :firstname].each{ |u|
# u est un array
print [u[1], u[2], u[0]].join(" ")
}
Doc et source : https://github.com/ernie/valium#readme
La page des benchmarks est aussi intéressante (sachant qu'en plus les tests ont été fait avec ruby 1.9.3 et Rubyonrails 3.2)