2013-08-27 22 views
5

In Rails 3, wenn ich die db treffen wollte, würde ich.all am Ende einer Abfrage nehmen. Dies ist nützlich, wenn ich Dinge wie das Aktualisieren von Cache bei Schreibvorgängen mache (also liest immer Cache).Rails 4 Äquivalent von Rails 3 'Model.all'

Nun in Rails 4, Model.all gibt ein ActiveRecord::Relation Objekt zurück (dh trifft nicht die db). Was ist der beste Weg, um es tatsächlich an die db gehen und die angegebenen Datensätze zurückgeben?

+0

versuchen Model.all.load – Bigxiang

+0

@Bigxiang: ["Der Rückgabewert ist die Beziehung selbst, nicht die Datensätze."] (Http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method- i-Laden). –

+0

Oh, Entschuldigung, mein Fehler. Ich denke "to_a" wird funktionieren. – Bigxiang

Antwort

8

Model.all.to_a in Rails 4 wird das gleiche Ergebnis wie Modal.all in Rails geben 3.

folgt ändern:

@Bigxiang wies in seinem Kommentar aus Model.all.load, diese Methode für bestimmte Zugriffe der Datenbank, um zu versuchen, aber immer noch Gibt eine ActiveRecordRelation zurück. Und im Grunde, um eine ähnliche Funktionalität wie Model.all von "Rails 3" zu erhalten, können Sie to_a auf die zurückgegebene ActiveRecordRelation aufrufen.

+0

Ja, ich las das Dokument achtlos, "to_a" ist gut :) – Bigxiang

+0

Ich wurde von der gleichen Ausgabe gestrahlt, danke für den Beitrag –

+0

Es lohnt sich auch, wenn Sie bereits eine ActiveRecord :: Relation haben, brauchen Sie die ' .all'. Beispiel: Wenn Sie in Rails 3.2 "Model.where (name:" John "). all" haben, können Sie es durch "Model.where (name:" John ") ersetzen. to_a' anstatt" Model.where (name : "John"). All.to_a' in Rails 4 – Felix