渴望从Rails中的关联加载named_scope

Dan*_*rez 5 ruby-on-rails

有没有办法从关联中急切加载named_scope?

我有我的文章模型:

class Article < ActiveRecord::Base
  has_many :comments
end
Run Code Online (Sandbox Code Playgroud)

和我的评论模型:

class Comment < ActiveRecord::Base
  belongs_to :article

  named_scope :approved, :conditions => { :approved => true }
  named_scope :unapproved, :conditions => { :approved => false }
end
Run Code Online (Sandbox Code Playgroud)

我可以急切地加载文章的所有评论:

@article = Article.find(params[:id], :include => :comments)
Run Code Online (Sandbox Code Playgroud)

我怎样才能这样做,但仅限于批准的评论?

Rya*_*nes 3

目前它还没有内置到 Rails 中,但 Ryan Daigle 创建了一个名为 utility_scopes 的插件,它添加了一个 with() 范围,因此您可以执行以下操作:

Article.approved.with(:comments)
Run Code Online (Sandbox Code Playgroud)

博客文章:http://ryandaigle.com/articles/2008/8/20/named-scope-it-s-not-just-for-conditions-ya-know Github 存储库:http://github.com/yfactorial /utility_scopes

[根据评论更新]

我的错。我读得不够好。我不认为有任何东西可以让你像这样调用一个名为_scope 的关联。我能想到的最接近的事情是在文章上创建一个named_scope:

class Article < ActiveRecord::Base
   named_scope :with_approved_comments, {:include => :comments, :conditions => ['comments.approved = ?', true]}
end
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。