with sort query natural example descending asc sorting date ruby-on-rails-4 mongoid

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)