Ahora mismo estoy haciendo algo como esto para seleccionar una sola columna de datos:
points = Post.find_by_sql("select point from posts")
Luego, pasándolos a un método, me gustaría que mi método permaneciera agnóstico y ahora tengo que llamar a hash.point desde dentro de mi método. ¿Cómo puedo convertir esto rápidamente en una matriz y pasar el conjunto de datos a mi método, o hay una mejor manera?
                    
                        ruby-on-rails
                                ruby
                                ruby-on-rails-3
                                
                    
                    
                        franklin stine
fuente
                
                
            fuente

Person.ids.distinctlugar deuniq: entoncesPerson.distinct.pluck(:role)Deberías usar el
pluckmétodo como sugirió @alony. Si está atascado antes de Rails 3.2, puede usar elselectmétodo ActiveRecord junto conArray#map:Post.select(:point).map(&:point) #=> ["foo", "bar", "baz"].map{|x| x.title}sin embargo, antes de Ruby 1.9 tendrías que hacerlo , porqueSymbol#to_proc(alias por el&operador unario ) no está definido en versiones anteriores de Ruby.fuente
Si ve la definición de select_values, entonces use 'map (&: field_name)'
def select_values(arel, name = nil) result = select_rows(to_sql(arel), name) result.map { |v| v[0] } endLa forma común y general de Rails para recopilar todos los valores de los campos en una matriz es como:
points = Post.all(:select => 'point').map(&:point)fuente
Post.select(:point).limit(1)realizaSELECT point FROM "posts" LIMIT 1mientras quePost.all(:select => :point).limit(1)aumenta aNoMethodError. Por favor corrígeme si estoy equivocado.points = Post.all.collect {|p| p.point}fuente
selectdeclaración solo recupera las columnas especificadas.