Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Rails 3 - Eifriges Laden mit Bedingungen

Fügen Sie eine neue Zuordnung namens published_pages hinzu (abgesehen von Ihren aktuellen Assoziationen)

class Category

  has_many   :children,        :class_name => "Category", 
               :foreign_key => "parent_id"
  has_many   :published_pages, :class_name => "Page", 
               :conditions  => { :is_published => true }

end

Jetzt können Sie alle Kategorien wie folgt abrufen:

self.categories.includes(:children, :published_pages)

Wenn Sie wissen möchten, warum Ihr Ansatz nicht funktioniert hat, lesen Sie die Rails Dokumentation (scrollen Sie 10-15 Zeilen nach dem Eager loading of associations Sektion). Ich habe das relevante Snippet unten eingefügt:

Um gefilterte Zeilen einer Assoziation eifrig zu laden, verwenden Sie eine Assoziation mit Bedingungen:

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

Post.find(:all, :include => :approved_comments)