私はあなたができる一つのことは、joins/merge
class Book < ARBase
scope :with_long_chapters, ->{ joins(:chapter).merge(Chapter.very_long) }
end
class Chapter < ARBase
scope :very_long, -> { logic for querying chapters with over 300 pages }
end
EDIT(#2)を使用することだと思う:あなたはあなたの書き方でかなり創造的な取得することができ、より再利用可能な範囲
class Book < ARBase
scope :by_chapter_page_count, ->(pages){ joins(:chapter).merge(Chapter.by_page_count pages) }
scope :with_climax, -> { joins(:chapter).merge(Chapter.by_category :climax) }
scope :long_with_climax, -> { by_chapter_page_count(400).with_climax }
end
class Chapter < ARBase
scope :by_page_count, ->(pages) { where("pages > ?", pages }
scope :by_category, ->(category) { where category: category }
end
Book.by_chapter_page_count(100)
をスコープ
これは少し洗練されていますが、子モデルで再利用するたびに新しいスコープを記述する必要はありません。 – jtmarmon
@jtmarmon子モデルで再利用するたびに新しいスコープを書くことによって、何を意味するのかを明確にすることができますか?私はあなたが何を得ているのか分かりません。別のクエリを使用する場合は、新しいスコープを定義する必要があります。 – Sean
@jtmarmon私の答えを少し修正して、範囲をより再利用できるかどうかを見てみましょう。 – Sean