如何获取单个列的值到数组中
现在我正在做这样的事情来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}