La otra respuesta no funcionó para mí ya que tengo que cargar muchas asociaciones y asociaciones de esas asociaciones en algunos modelos. Encontré que tenía dos opciones, cambiar la asociación para tener condiciones y así hacer una asociación para cada alcance que quería o convertirlos en métodos en la clase que tenía la asociación has_many. Que tenía que hacer algo en la línea de:
@newspaper = Newspaper.find params[:id], :include => {
:articles => {
:author => true,
:source => true
}
}
Así que en mi ejemplo he cambiado:
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
a:
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
he encontrado de esta manera que es preferible ya que puede ahora ansioso de cargar artículos cuando encuentre un periódico y simplemente cambie todo el artículo. privado a article_private. Si hubiera creado dos asociaciones como:
has_many :articles_private, :class_name => 'Article', :conditions {:private => true}
has_many :articles_public, :class_name => 'Article', :conditions {:private => false}
tendría que carga con ganas a ambos en los casos en que necesitaba todos los artículos asociados.
Si entendí la publicación del blog correctamente, eso me daría los artículos de alcance con todos sus comentarios. Es equivalente a: Article.approved.all (: include =>: comments). Lo que estaba buscando era analizar los comentarios, de modo que cada artículo solo muestra sus comentarios aprobados, no todos. –