Итак, в основном у меня есть два класса: Книга и Автор .Книги могут иметь несколько авторов, а авторы могут иметь несколько книг.Книги имеют следующую область по умолчанию.
default_scope :order => "publish_at DESC"
На странице "Показать автора" я хочу перечислить все книги, связанные с этим автором, поэтому я говорю следующее ...
@author = Author.find(params[:id])
@books = @author.books
Всепока хорошо.Автор # show page перечисляет все книги, принадлежащие этому автору, упорядоченные по дате публикации.
Я также работаю над драгоценным камнем, который может сортировать по популярности книги.
@books = @author.books.sort_by_popularity
Проблема состоит в том, что всякий раз, когда он пытается сортировать, default_scope всегда мешает.И если я попытаюсь снять его, прежде чем он избавится от отношения автора и вернет каждую книгу в базе данных.Например,
@books = @author.books.unscoped.sort_by_popularity # returns all books in database
Мне интересно, могу ли я использовать ActiveRelation кроме () метода , чтобы сделать что-то подобное (кажется, что оно должно работать, но это не так.игнорирует порядок, только не тогда, когда это порядок default_scope)
def sort_by_popularity
self.except(:order).do_some_joining_magic.order('popularity ASC')
# |------------| |---------------------|
end
Есть идеи, почему это не работает?Любые идеи о том, как заставить это работать по-другому?Я знаю, что могу просто избавиться от default_scope, но мне интересно, есть ли другой способ сделать это.