2009-07-01 5 views
2

Dans mes Rails 2.3.2 appRails de chargement impatient, bug possible

J'ai 2 modèles:

class Post 
    has_many :approved_comments, :class_name => 'Comment', :conditions => ['approved => ?', true] 
end 

class Comment 
    belongs_to :post 
end 

Pour une raison quelconque lorsque je tente de charger impatient mes commentaires, je reçois une erreur

post = Post.find(:first, :conditions => ["permalink=?", permalink], :include => :approved_comments 
 
undefined method `loaded?' for # 

venant de la ligne de association_preload.rb 228

Est-ce un problème connu ou est-ce que je fais quelque chose de mal ou de non supporté?

Je semblent trouver une petite discussion à ce sujet à: http://groups.google.com/group/maine-ruby-users-group/browse_thread/thread/796cf58b62f9bc52

+0

Il est plus sûr d'utiliser le hachage pour les conditions:: conditions => {: approved => true}, et: conditions => {: permalink => permalink}. I est plus agnostique de base de données. – klew

+0

Vous pouvez également utiliser Post.first (: conditions ...) au lieu de Post.find (: first, ....). Et aussi envisager d'utiliser named_scopes pour trouver des commentaires approuvés – klew

+0

Merci klew, Ill gardez cela à l'esprit, je suis en train de revenir à quelques dev de rails après une pause de quelques années, donc il prend un peu de rattraper son retard. –

Répondre

1

FWIW,

Je pense que je l'ai foiré ici, j'avais approved_comments défini deux fois dans ma classe. L'effet secondaire malheureux que j'ai découvert était que le chargement impatient joue avec ce filtrage et entre dans l'enfer. J'ai donc travaillé autour de tout en sélectionnant tout et en filtrant dans le code.

0

Vous pouvez essayer quelque chose comme:

class Post 
    has_many :approved_comments, :class_name => 'Comment' 
end 

class Comment 
    belongs_to :post 
end 

puis quelque chose comme:

Post.find(:all, :joins => :approved_comments, :conditions => ["comments.approved = ? AND permalink = ?", true, permalink], :include => :approved_comments) 

Ce trouvera tous les messages que vous voulez et désireux charge les commentaires pour eux. Dans un grand ensemble de disques je recommanderais cependant contre cela, il sera lent et soufflera la taille de la mémoire de votre instance passager/mongrel.

+0

ouais c'est pourquoi je préfère les nus: include, le nouveau chargement impatient va exécuter 2 requêtes, avec un nu inclus, un pour les commentaires et un pour le post, ce qui est beaucoup plus convivial. Ceci: http://www.samsaffron.com/archive/2008/03/15/Vous devriez + être + vigilant + quand + en utilisant + Active + Enregistrement + charge + n'est pas totalement fixe –

+0

Peut-être, je ne suis pas un fan de nu comprend comme il peut très facilement échapper à tout contrôle. C'est pourquoi je ne m'occupe pas de ce genre de chose, il n'y a toujours que 2 requêtes, mais il est vraiment désireux de charger les disques dont j'ai besoin au lieu de tout charger et de décider ensuite de ce dont il a besoin. – nitecoder