Frage ActiveRecord sucht und gibt nur ausgewählte Spalten zurück


bearbeite 2

Wenn Sie darüber stolpern, überprüfen Sie beide Antworten, da ich jetzt zupfen würde


Ich habe eine ziemlich große benutzerdefinierte Datenmenge, die ich zurückgeben möchte, um als json echoed zu werden. Ein Teil ist:

l=Location.find(row.id)
tmp[row.id]=l

aber ich möchte etwas tun wie:

l=Location.find(row.id).select("name, website, city")
tmp[row.id]=l

aber das scheint nicht zu funktionieren. Wie würde ich das zur Arbeit bringen?

Danke

bearbeiten 1
alternativ, gibt es eine Möglichkeit, dass ich ein Array von nur den Attributen übergeben kann, die ich möchte?


75
2017-10-27 02:09


Ursprung


Antworten:


In Schienen 2

l = Location.find(:id => id, :select => "name, website, city", :limit => 1)

...oder...

l = Location.find_by_sql(:conditions => ["SELECT name, website, city FROM locations WHERE id = ? LIMIT 1", id])

Dieses Referenzdokument gibt Ihnen die gesamte Liste der Optionen, mit denen Sie arbeiten können .findeinschließlich, wie nach Anzahl, ID oder einer beliebigen anderen Spalte / Einschränkung zu begrenzen.

In Rails 3 mit ActiveRecord Query-Schnittstelle

l = Location.where(["id = ?", id]).select("name, website, city").first

Ref: Active Record Query-Schnittstelle

Sie können auch die Reihenfolge dieser verketteten Aufrufe ändern, tun .select(...).where(...).first - Alle diese Aufrufe erstellen die SQL-Abfrage und senden sie dann ab.


77
2017-10-27 02:12



zupfen (column_name)

Diese Methode wurde entwickelt, um eine Auswahl durch eine einzige Spalte als direkte SQL-Abfrage durchzuführen. Rückgabewert Array mit Werten des angegebenen Spaltennamens. Die Werte haben denselben Datentyp wie die Spalte.

Beispiele:

Person.pluck(:id) # SELECT people.id FROM people
Person.uniq.pluck(:role) # SELECT DISTINCT role FROM people
Person.where(:confirmed => true).limit(5).pluck(:id)

sehen http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck

Sein eingeführt Schienen 3.2 und akzeptiert nur einzelne Spalte. In Schienen 4 akzeptiert es mehrere Spalten


185
2017-10-11 16:30



Meine Antwort kommt ziemlich spät, weil ich ein ziemlich neuer Entwickler bin. Ich denke, was mein Freund gesucht hat, ist folgendes:

Location.select(:name, :website, :city).find(row.id)

Übrigens, das ist es Schienen 4


7
2017-07-07 16:43