Sie sind etwas falsch, wenn Sie Room.find(roomId)
kehrt eine „einzelne Spalte aus dem Raum Tabelle“ sagen. Es gibt tatsächlich eine einzelne Zeile zurück.
Wie auch immer, es gibt ein paar Möglichkeiten, wie Sie das tun können.
Ein guter Ausgangspunkt ist, die .attributes
Methode für ein Modell zu verwenden, um es in einen Hash zu konvertieren.
Also sagen Sie zum Beispiel, Sie haben einen Benutzer mit einem Namen, E-Mail und ID-Spalten in der Datenbank. Sie können user.attributes
anrufen, um { "name" => "max", "email" => "[email protected]", "id" => 5 }
zu erhalten.
können Sie mit
user.select { |k,v| k.in?("name", "email") }
nur den Namen und die E-Mail auswählen und to_json
dann auf das Ergebnis nennen.
Um zu vermeiden, dass Sie für jede Controller-Antwort benutzerdefinierten to_json-Code schreiben müssen, können Sie .attributes
im Modell überschreiben. Sag meine Benutzertabelle ein Passwort Spalt hat, die ich noch nie in meinem API verfügbar machen möge:
class User
def attributes
super.reject { |k,v| v.in?("password") }
end
end
Dann, wenn Sie eine Liste der Benutzer als JSON zurückgeben müssen:
von Pavan
render json: { users: @users.map(&:attributes) }.to_json, status: 200
Die Antwort wird übrigens auch funktionieren.
Ein anderer Ansatz besteht darin, jbuilder
zu verwenden und json "Ansichten" für Ihre Datensätze zu erstellen.
Dies enthält tatsächlich immer noch Schlüssel-Wert-Paare für jede einzelne Spalte, auch wenn Sie sie nicht in das 'select' aufgenommen haben. Die anderen Werte sind einfach null. –
@maxpleaner eigentlich nicht. das einzige, was es tut, ist ID, wenn leer. 'user = User.select (: id,: email) .find 152265' gibt' => # ' –
toddmetheny
ah Entschuldigung. editiere deine Antwort und ich kann sie verbessern. –