Как получить значения одного столбца в массив



прямо сейчас я делаю что-то вроде этого, чтобы выделить один столбец данных:



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


затем передавая их в метод, я бы хотел, чтобы мой метод оставался агностиком, и теперь должен вызывать хэш.точка внутри моего метода. Как я могу быстро преобразовать это в массив и передать набор данных в мой метод, или есть лучший способ?

505   4  

4 ответов:

в 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)

разница между uniq и distinct

вы должны использовать pluck метод, как предложил @alony. Если вы застряли перед 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.

Если вы видите определение select_values, то он использует ' map (&: field_name)'

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

общий и общий рельсы способ собрать все значения полей в массиве выглядит так:

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

Comments

    Ничего не найдено.