Im Moment mache ich so etwas, um eine einzelne Datenspalte auszuwählen:
points = Post.find_by_sql("select point from posts")
Wenn ich sie dann an eine Methode übergebe, möchte ich, dass meine Methode agnostisch bleibt und jetzt hash.point aus meiner Methode heraus aufrufen muss. Wie kann ich dies schnell in ein Array konvertieren und den Datensatz an meine Methode übergeben, oder gibt es einen besseren Weg?
ruby-on-rails
ruby
ruby-on-rails-3
Franklin Stine
quelle
quelle
Person.ids
.distinct
anstelle vonuniq
: soPerson.distinct.pluck(:role)
Sie sollten die
pluck
Methode wie von @alony vorgeschlagen verwenden. Wenn Sie vor Rails 3.2 nicht weiterkommen, können Sie die ActiveRecord-select
Methode zusammen mitArray#map
folgenden Methoden verwenden :Post.select(:point).map(&:point) #=> ["foo", "bar", "baz"]
vor Ruby 1.9 müssten Sie dies jedoch tun
.map{|x| x.title}
, daSymbol#to_proc
(Aliasing durch den unären&
Operator) in früheren Versionen von Ruby nicht definiert ist.quelle
Wenn Sie die Definition von select_values sehen, verwenden Sie 'map (&: field_name)'.
def select_values(arel, name = nil) result = select_rows(to_sql(arel), name) result.map { |v| v[0] } end
Die allgemeine und allgemeine Rails-Methode zum Sammeln aller Feldwerte im Array lautet wie folgt:
points = Post.all(:select => 'point').map(&:point)
quelle
Post.select(:point).limit(1)
führt aus,SELECT point FROM "posts" LIMIT 1
währendPost.all(:select => :point).limit(1)
aNoMethodError
. Bitte korrigieren Sie mich, falls ich falsch liege.points = Post.all.collect {|p| p.point}
quelle
select
Anweisung nur die angegebenen Spalten abruft.