fra*_*ine 77 ruby ruby-on-rails ruby-on-rails-3
现在我正在做这样的事情来选择一列数据:
points = Post.find_by_sql("select point from posts")
Run Code Online (Sandbox Code Playgroud)
然后将它们传递给方法,我希望我的方法保持不可知,现在必须从我的方法中调用hash.point.如何快速将其转换为数组并将数据集传递给我的方法,还是有更好的方法?
alo*_*ony 183
在Rails 3.2有一个拔毛方法对本
像这样:
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)
Run Code Online (Sandbox Code Playgroud)
Pat*_*ity 15
您应该使用pluck
@alony建议的方法.如果你在Rails 3.2之前被卡住了,你可以使用ActiveRecord select
方法Array#map
:
Post.select(:point).map(&:point)
#=> ["foo", "bar", "baz"]
Run Code Online (Sandbox Code Playgroud)
在Ruby 1.9之前,您必须这样做.map{|x| x.title}
,因为Symbol#to_proc
(由一元运算&
符别名)未在早期版本的Ruby中定义.
如果你看到select_values的定义,那么它使用'map(&:field_name)'
def select_values(arel, name = nil)
result = select_rows(to_sql(arel), name)
result.map { |v| v[0] }
end
Run Code Online (Sandbox Code Playgroud)
收集数组中所有字段值的常用和常规Rails方法如下:
points = Post.all(:select => 'point').map(&:point)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
71365 次 |
最近记录: |