Comment obtenir les valeurs d’une seule colonne dans un tableau

En ce moment, je fais quelque chose comme ça pour sélectionner une seule colonne de données:

points = Post.find_by_sql("select point from posts") 

En les transmettant ensuite à une méthode, j’aimerais que ma méthode rest agnostique et que je doive maintenant appeler hash.sharepointpuis ma méthode. Comment puis-je rapidement convertir cela en un tableau et transmettre le jeu de données à ma méthode, ou existe-t-il un meilleur moyen?

Dans Rails 3.2, il existe une méthode de pincement

Juste comme ça:

 Person.pluck(:id) # SELECT people.id FROM people Person.pluck(:role).uniq # unique roles from array of people Person.distinct.pluck(:role) # SELECT DISTINCT role FROM people SQL Person.where(:confirmed => true).limit(5).pluck(:id) 

Différence entre uniq et distinct

Vous devriez utiliser la méthode de pincement comme suggéré par @alony. Si vous êtes bloqué avant Rails 3.2, vous pouvez utiliser la méthode de select ActiveRecord avec Array#map :

 Post.select(:point).map(&:point) #=> ["foo", "bar", "baz"] 

avant Ruby 1.9 vous devriez faire .map{|x| x.title} .map{|x| x.title} , car le Symbol#to_proc (alias par l’opérateur unaire & opérateur) n’est pas défini dans les versions antérieures de Ruby.

Si vous voyez la définition de select_values, alors elle utilise ‘map (&: field_name)’

  def select_values(arel, name = nil) result = select_rows(to_sql(arel), name) result.map { |v| v[0] } end 

La méthode Rails commune et générale pour collecter toutes les valeurs de champs du tableau est la suivante:

 points = Post.all(:select => 'point').map(&:point) 
 points = Post.all.collect {|p| p.point}