今、私はこのようなことをしてデータの単一の列を選択しています:
points = Post.find_by_sql("select point from posts")
次に、それらをメソッドに渡すと、私のメソッドは不可知のままになり、メソッド内からhash.pointを呼び出す必要があります。これを配列にすばやく変換してデータセットをメソッドに渡すにはどうすればよいですか、それより良い方法はありますか?
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)
@alonyが推奨するように、pluck
メソッドを使用する必要があります。 Rails 3.2の前に立ち往生している場合、ActiveRecord select
メソッドとArray#map
:
Post.select(:point).map(&:point)
#=> ["foo", "bar", "baz"]
before 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
配列内のすべてのフィールド値を収集する一般的で一般的なRailsの方法は次のとおりです。
points = Post.all(:select => 'point').map(&:point)
points = Post.all.collect {|p| p.point}