如何获取单个列的值到数组中

现在我正在做这样的事情来select一列数据:

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

然后将它们传递给一个方法,我想我的方法保持不可知,现在必须从我的方法中调用hash.point。 我怎么能快速转换成一个数组,并将数据集传递给我的方法,或者有更好的方法?

在Rails 3.2中有一个pluck方法

像这样:

 Person.pluck(:id) # SELECT people.id FROM people Person.uniq.pluck(:role) # SELECT DISTINCT role FROM people Person.where(:confirmed => true).limit(5).pluck(:id) 

你应该使用@alonybuild议的pluck方法。 如果您在Rails 3.2之前陷入困境,则可以使用ActiveRecord select方法和Array#map

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

在Ruby 1.9之前,你必须做.map{|x| x.title} .map{|x| x.title} ,因为在早期版本的Ruby中没有定义Symbol#to_proc (由一元运算符别名)。

如果你看到select_values的定义,那么它使用'map(&:field_name)'

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

收集数组中所有字段值的通用Rails方法如下:

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