现在我正在做这样的事情来选择一列数据:
points = Post.find_by_sql("select point from posts")
然后将它们传递给方法,我希望我的方法保持不可知,现在必须从我的方法中调用hash.point。如何快速将其转换为数组并将数据集传递给我的方法,还是有更好的方法?
答案 0 :(得分:182)
在Rails 3.2中,这个
有一个pluck method就像这样:
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)
答案 1 :(得分:15)
您应该使用@alony建议的pluck
方法。如果您在Rails 3.2之前遇到困难,可以将ActiveRecord select
方法与Array#map
一起使用:
Post.select(:point).map(&:point)
#=> ["foo", "bar", "baz"]
在Ruby 1.9之前,您必须执行.map{|x| x.title}
,因为Symbol#to_proc
(由一元&
运算符别名)未在早期版本的Ruby中定义。
答案 2 :(得分:5)
如果您看到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)
答案 3 :(得分:2)
points = Post.all.collect {|p| p.point}