2009-03-28 9 views
5

関連付けからnamed_scopeを読み込む方法はありますか?Railsの関連付けからnamed_scopeを読み込むことをお待ちしております。

は、私は私の記事のモデルを持っている:

class Article < ActiveRecord::Base 
    has_many :comments 
end 

と私のコメントモデル:

class Comment < ActiveRecord::Base 
    belongs_to :article 

    named_scope :approved, :conditions => { :approved => true } 
    named_scope :unapproved, :conditions => { :approved => false } 
end 

私でし熱心な負荷との記事のすべてのコメント:

@article = Article.find(params[:id], :include => :comments) 

どのように私ができます承認されたコメントの場合にのみ、同じことをしますか?

答えて

3

それは、この時点でレールに-で構築された、しかし、あなたが行うことができますので、ライアンDaigle氏は、()のスコープを追加するプラグインと呼ばれるutility_scopesが作成されていません。

Article.approved.with(:comments) 

ブログポスト:http://ryandaigle.com/articles/2008/8/20/named-scope-it-s-not-just-for-conditions-ya-know のGithubをレポ:http://github.com/yfactorial/utility_scopes

[コメントごとに更新]

私の悪い。私は十分によく読まなかった。私はあなたのような名前付きの協会を呼び出せるようなものはないと思う。私が考えることができる最も近いことは、記事で名前付きスコープを作成することです:

これが役に立ちます。

+0

私がブログの投稿を正しく理解していれば、それは私にすべてのコメントを付けたスコープのある記事を与えるだろう。これはArticle.approved.all(:include =>:comments)と同じです。私が探していたのはコメントのスコープだけだったので、各記事はすべてのコメントではなく承認されたコメントを読み込むようになっていました。 –

1

いくつかのモデルでは、これらの関連付けの多くの関連付けや関連付けをロードする必要があるため、もう1つの答えは役に立たなかった。 2つのオプションがあることがわかりました。関連付けを変更して、必要なスコープごとに関連付けを行うか、またはhas_many関連を持つクラスのメソッドに変換します。私ができるので、私はこの方法が好適であることが判明

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 

:だから私の例では、私は変更

@newspaper = Newspaper.find params[:id], :include => { 
    :articles => { 
    :author => true, 
    :source => true 
    } 
} 

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 

をする私はの線に沿って何かを行うために必要な新聞を見つけて、すべてのarticle.privateをarticle_privateに変更するときに、今すぐ熱心な記事を読み込みます。

has_many :articles_private, :class_name => 'Article', :conditions {:private => true} 
has_many :articles_public, :class_name => 'Article', :conditions {:private => false} 

関連するすべての記事が必要な場合は、両方ともそれらのアイテムを読み込む必要があります。

関連する問題