Представьте себе книгу и модель главы. Каждая глава belongs_to :book
и книга has_many :chapters
. У нас есть области действия в главе, например, :very_long
возвращает главы с более чем 300 страницами.Rails scope on association_to association
Много раз мы хотим получить все книги с любыми главами более 300 страниц. То, как мы обычно достигают это примерно так:
# book.rb
scope :has_very_long_chapter, -> { where(id: Chapter.very_long.select(:book_id) }
Однако, как вы можете себе представить, это становится довольно утомительно прокси сферу каждый раз, когда мы хотим, чтобы отфильтровать книги по главе областей. Есть ли более идиоматический или более чистый способ достичь этого?
Это немного чище, но это не решает проблему необходимости писать новую область каждый раз, когда я хочу повторно использовать ее на дочерней модели. – jtmarmon
@jtmarmon вы могли бы прояснить, что вы имеете в виду, создавая новую область каждый раз, когда хотите повторно использовать одно из дочерней модели? Я не совсем уверен, что понимаю, к чему вы клоните. Если вы хотите иметь другой запрос, вам нужно будет определить новые области. – Sean
@jtmarmon Позвольте немного пересмотреть мой ответ, чтобы увидеть, можно ли сделать область более пригодной для повторного использования. – Sean