Así que, básicamente, tengo dos clases, libro y Autor. Los libros pueden tener varios autores y los autores pueden tener varios libros. Los libros tienen el siguiente alcance predeterminado.de anulación sólo el ámbito predeterminado (en concreto orden) y nada más en Rails
default_scope :order => "publish_at DESC"
En la página Autor espectáculo Quiero que todos los libros asociados a ese autor, así que decir lo siguiente ...
@author = Author.find(params[:id])
@books = @author.books
Todo está bien hasta ahora. La página del autor # show enumera todos los libros pertenecientes a ese autor ordenados por fecha de publicación.
También estoy trabajando en una joya que es capaz de clasificar por la popularidad de un libro.
@books = @author.books.sort_by_popularity
El problema es que cada vez que trata de ordenar, el default_scope siempre se interpone en el camino. Y si trato de desvelarlo antes, se eliminará la relación del autor y se devolverán todos los libros en la base de datos. Por ejemplo
@books = @author.books.unscoped.sort_by_popularity # returns all books in database
Me pregunto si puedo utilizar el ActiveRelation except() method a hacer algo como esto (que parece que debería funcionar, pero no es así. No tiene en cuenta el orden, pero no cuando se trata de una orden default_scope)
def sort_by_popularity
self.except(:order).do_some_joining_magic.order('popularity ASC')
# |------------| |---------------------|
end
¿Alguna idea de por qué esto no funciona? ¿Alguna idea sobre cómo hacer que esto funcione de una manera diferente? Sé que puedo deshacerme del default_scope, pero me pregunto si existe otra forma de hacerlo.
¡Gracias! Eso fue tan fácil. Esto es exactamente lo que estaba buscando. – Ryan
De acuerdo, esto fue un salvavidas. Nunca escuché de reordenar hasta ahora. – natebeaty
¡Permítame ser el tercero! Cambié el orden a un nuevo pedido en mi alcance nombrado y funcionó como un amuleto. –