Как получить значения одного столбца в массив
прямо сейчас я делаю что-то вроде этого, чтобы выделить один столбец данных:
points = Post.find_by_sql("select point from posts")
затем передавая их в метод, я бы хотел, чтобы мой метод оставался агностиком, и теперь должен вызывать хэш.точка внутри моего метода. Как я могу быстро преобразовать это в массив и передать набор данных в мой метод, или есть лучший способ?
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)
вы должны использовать
pluckметод, как предложил @alony. Если вы застряли перед Rails 3.2 вы можете использовать ActiveRecordselectметод вместе с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)
Comments