sorting - sort - Mongoid Rails 4 ordena por asc o desc orden created_at
query mongodb limit (4)
Tengo una aplicación Rails 4 usando Mongoid. Quiero hacer algo básico: mostrar el modelo de libro que tengo por orden descendente de acuerdo con el campo created_at en la vista de índice. En el controlador books_controller.rb:
def index
@books = Book.order_by(:created_at.desc)
end
Esto no está funcionando. También probé los siguientes 2 que no funcionan:
@books = Book.find :all, :order => "created_at DESC"
Book.find(:all, :order => "created_at DESC").each do |item|
@books << item
end
En la vista tengo algo como esto:
<% @books.each do |b| %>
...
<% end %>
Gracias.
Book.where (autor: "Stephen King"). Sort ({"created_at": 1}) -> Orden Ascendente
Book.where (autor: "Stephen King"). Sort ({"created_at": -1}) -> Orden descendente
Puede usar tanto "orden" como "orden_por", y son equivalentes. Todos estos son equivalentes:
Book.order_by(created_at: :desc)
Book.order_by(created_at: -1)
Book.order(created_at: :desc)
Book.order(created_at: -1)
Este es el código fuente de mongoid 5.1.3 "lib / mongoid / criteria / queryable / optional.rb":
# Adds sorting criterion to the options.
#
# @example Add sorting options via a hash with integer directions.
# optional.order_by(name: 1, dob: -1)
#
# @example Add sorting options via a hash with symbol directions.
# optional.order_by(name: :asc, dob: :desc)
#
# @example Add sorting options via a hash with string directions.
# optional.order_by(name: "asc", dob: "desc")
#
# @example Add sorting options via an array with integer directions.
# optional.order_by([[ name, 1 ], [ dob, -1 ]])
#
# @example Add sorting options via an array with symbol directions.
# optional.order_by([[ name, :asc ], [ dob, :desc ]])
#
# @example Add sorting options via an array with string directions.
# optional.order_by([[ name, "asc" ], [ dob, "desc" ]])
#
# @example Add sorting options with keys.
# optional.order_by(:name.asc, :dob.desc)
#
# @example Add sorting options via a string.
# optional.order_by("name ASC, dob DESC")
#
# @param [ Array, Hash, String ] spec The sorting specification.
#
# @return [ Optional ] The cloned optional.
#
# @since 1.0.0
def order_by(*spec)
option(spec) do |options, query|
spec.compact.each do |criterion|
criterion.__sort_option__.each_pair do |field, direction|
add_sort_option(options, field, direction)
end
query.pipeline.push("$sort" => options[:sort]) if aggregating?
end
end
end
alias :order :order_by
Puedes intentar esto
def index
@books = Book.order_by(:created_at => ''desc'')
end
funciona bien.
def index
@books = Book.order(:created_at => ''desc'')
end
Funciona para mí, en lugar de ordenar por orden de uso (depende de la versión de los rieles)