Câu trả lời khác không phù hợp với tôi vì tôi phải tải nhiều liên kết và liên kết của các liên kết đó trên một số kiểu máy. Tôi thấy tôi có hai lựa chọn, thay đổi liên kết để có điều kiện và do đó tạo một liên kết cho mỗi phạm vi tôi muốn hoặc biến chúng thành các phương thức trên lớp có liên kết has_many. Tôi cần phải làm một cái gì đó dọc theo dòng:
@newspaper = Newspaper.find params[:id], :include => {
:articles => {
:author => true,
:source => true
}
}
Vì vậy, trong ví dụ của tôi, tôi đã thay đổi:
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
tới:
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
tôi thấy cách này là thích hợp hơn kể từ khi tôi có thể hiện đang háo hức tải bài báo khi tìm một tờ báo và chỉ cần thay đổi tất cả article.private thành article_private. Tôi đã tạo hai liên kết như:
has_many :articles_private, :class_name => 'Article', :conditions {:private => true}
has_many :articles_public, :class_name => 'Article', :conditions {:private => false}
Tôi sẽ phải háo hức tải chúng cả trong trường hợp tôi cần tất cả các bài viết liên quan.
Nếu tôi hiểu bài đăng trên blog chính xác, điều đó sẽ cho tôi các bài viết có phạm vi với tất cả các nhận xét của họ. Nó tương đương với: Article.approved.all (: include =>: comments). Những gì tôi đã tìm kiếm đã được scoping các ý kiến, để mỗi bài viết chỉ háo hức tải ý kiến được phê duyệt của nó, không phải tất cả trong số họ. –