L'autre réponse n'a pas fonctionné pour moi puisque je dois charger de nombreuses associations et associations de ces associations sur certains modèles. J'ai trouvé que j'avais deux options, changer l'association pour avoir des conditions et ainsi faire une association pour chaque portée que je voulais ou les transformer en méthodes sur la classe qui avait l'association has_many. Je devais faire quelque chose le long des lignes de:
@newspaper = Newspaper.find params[:id], :include => {
:articles => {
:author => true,
:source => true
}
}
Donc, dans mon exemple, je changé:
class Newspaper < ActiveRecord::Base
has_many :articles
end
class Article
belongs_to :newspaper
belongs_to :author
has_one :source
named_scope :private, :conditions => { :private => true }
named_scope :public, :conditions => { :private => false }
end
à:
class Newspaper < ActiveRecord::Base
has_many :articles
def articles_public
articles.reject &:private
end
def articles_private
articles.select &:private
end
end
class Article
belongs_to :newspaper
belongs_to :author
has_one :source
end
J'ai trouvé cette façon d'être préférable, car je peux maintenant impatients de charger des articles lors de la recherche d'un journal et de changer tout article.private en article_private. Si je l'avais créé deux associations comme:
has_many :articles_private, :class_name => 'Article', :conditions {:private => true}
has_many :articles_public, :class_name => 'Article', :conditions {:private => false}
je dois charge les deux hâte dans les cas où je devais tous les articles associés.
Si j'ai bien compris l'article du blog, cela me donnerait les articles avec tous leurs commentaires. C'est équivalent à: Article.approved.all (: include =>: comments). Ce que je cherchais, c'était de délimiter les commentaires, afin que chaque article ne charge que ses commentaires approuvés, pas tous. –