2013-08-27 3 views
5

Dans Rails 3, si je voulais appuyer sur la touche db, je prendrais .all à la fin d'une requête. Ceci est utile lorsque je fais des choses comme actualiser le cache sur les écritures (donc lit toujours le cache).Rails 4 équivalent de Rails 3 'Model.all'

Maintenant dans Rails 4, Model.all renvoie un objet ActiveRecord::Relation (c'est-à-dire qu'il ne frappe pas la base de données). Quel est le meilleur moyen de l'obtenir réellement à la base de données et de renvoyer les enregistrements spécifiés?

+0

try Model.all.load – Bigxiang

+0

@Bigxiang: ["La valeur de retour est la relation elle-même, pas les enregistrements."] (Http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method- i-load). –

+0

Oh, désolé, mon erreur. Je pense que "to_a" fonctionnera. – Bigxiang

Répondre

8

Model.all.to_a Rails 4 donnera le même résultat que Modal.all dans Rails 3.

Modifier:

@Bigxiang, a souligné dans son commentaire à essayer Model.all.load, cette méthode pour la base de données certains succès mais toujours renvoie une valeur ActiveRecordRelation. Et fondamentalement pour obtenir une fonctionnalité similaire à Model.all de "Rails 3", vous pouvez appeler to_a sur le ActiveRecordRelation retourné.

+0

Oui, j'ai lu le document avec insouciance, "to_a" est bon :) – Bigxiang

+0

J'ai été blasted par ce même problème, merci de poster –

+0

Cela vaut aussi la peine si vous avez déjà une relation ActiveRecord :: vous n'avez pas besoin de ' .all'. Exemple: Si vous avez 'Model.where (name:" John "). all' dans Rails 3.2, vous pouvez le remplacer par' Model.where (name: "John"). to_a' plutôt que par Model.where (nom : "John"). All.to_a' in Rails 4 – Felix

Questions connexes