Mongoid Rails 4 Trier par asc ou desc ordre créé à

J'ai une application rails 4 utilisant Mongoid. Je veux faire quelque chose de basique est d'afficher le modèle de livre que j'ai en ordre décroissant selon le champ created_at dans la vue d'index. Dans le contrôleur books_controller.rb:

def index
  @books = Book.order_by(:created_at.desc)
end

Cela ne fonctionne pas. J'ai aussi essayé les 2 qui ne fonctionnent pas:

@books = Book.find :all, :order => "created_at DESC"

Book.find(:all, :order => "created_at DESC").each do |item|
  @books << item
end

Dans la vue j'ai quelque chose comme ceci:

<% @books.each do |b| %>
  ...
<% end %>

Merci.

35
demandé sur Shahzad Tariq 2014-06-04 15:58:26

4 réponses

Vous pouvez essayer ceci

def index
  @books = Book.order_by(created_at: :desc)
end

Cela fonctionne très bien.

52
répondu Shahzad Tariq 2018-08-08 17:22:06
def index
   @books = Book.order(:created_at => 'desc')
end

Cela fonctionne pour moi, au lieu de order_by use order (dépend de la version rails)

4
répondu Pbms 2016-05-31 09:57:26

Livre.où(auteur: "Stephen King").trier ({"created_at": 1})-- > Ordre croissant

Livre.où(auteur: "Stephen King").trier ({"created_at": -1}) -- > ordre décroissant

2
répondu Vinu Joseph 2017-09-26 09:41:30

Vous pouvez utiliser à la fois "order" et "order_by", et ils sont équivalents. Tous ces éléments sont équivalents:

Book.order_by(created_at: :desc)
Book.order_by(created_at: -1)
Book.order(created_at: :desc)
Book.order(created_at: -1)

C'est le code source de mongoid 5.1.3 "lib/mongoid/critères/queryable/facultatif.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
1
répondu liukgg 2016-07-08 09:04:34