Rails eager loading, possibile bug
-
21-08-2019 - |
Domanda
Nel mio Rails 2.3.2 app
Ho 2 modelli:
class Post
has_many :approved_comments, :class_name => 'Comment', :conditions => ['approved => ?', true]
end
class Comment
belongs_to :post
end
Per qualche ragione quando provo a caricare i miei commenti ansiosi, ottengo un errore
post = Post.find(:first, :conditions => ["permalink=?", permalink], :include => :approved_comments
undefined method `loaded?' for #
Per chi proviene da linea association_preload.rb 228
Si tratta di un problema noto, o sto facendo qualcosa di sbagliato o non supportato?
Mi sembra di trovare un po 'di discussione su questo a: http://groups.google.com/group/maine-ruby-users-group/browse_thread/thread/796cf58b62f9bc52
Soluzione
FWIW,
Penso che forse ho incasinato qui, ho avuto approved_comments definiti due volte nella mia classe. L'effetto collaterale che ho scoperto è che eager loading gioca con quella filtraggio e va a sinistra unirsi all'inferno. Così ho lavorato intorno ad esso selezionando tutto e filtraggio nel codice.
Altri suggerimenti
Si potrebbe provare qualcosa di simile:
class Post
has_many :approved_comments, :class_name => 'Comment'
end
class Comment
belongs_to :post
end
e poi qualcosa di simile:
Post.find(:all, :joins => :approved_comments, :conditions => ["comments.approved = ? AND permalink = ?", true, permalink], :include => :approved_comments)
Questo troverà tutti i messaggi che si desidera e quindi del carico ansiosi i commenti per loro. In un ampio set di record lo consiglio contro di essa, però, sarà lenta e spegnere la dimensione della memoria del vostro passeggero / instance bastardo.