class RelatedList < ActiveRecord::Base
extend Enumerize
enumerize :list_type, in: %w(groups projects)
belongs_to :content
has_many :contents, :order => :position
end
J'ai ce modèle dans mon application Rails qui émet un avertissement lorsque j'essaie de créer des enregistrements dans la console.
AVERTISSEMENT DE DEPRECATION: Les options suivantes dans votre RelatedList.has_many: les déclarations de contenu sont obsolètes:: order . Veuillez utiliser un bloc de portée à la place. Par exemple, ce qui suit: has_many : spam_comments, conditions: {spam: true}, nom de classe: 'Comment' doit être réécrit comme suit: has_many: spam_comments, -> { où spam: vrai}, nom_classe: 'Commentaire' . (appelé depuis /Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7)
Il semble que Rails 4 ait une nouvelle syntaxe: la syntaxe de commande à utiliser dans les modèles, mais je n'arrive pas à trouver la documentation dans les guides Rails.
Dans Rails 4, :order
est obsolète et doit être remplacé par un bloc de portée lambda, comme indiqué dans l'avertissement que vous avez posté dans la question. Un autre point à noter est que ce bloc d’étendue doit être passé avant toute autre option d’association telle que dependent: :destroy
etc.
Essayez ceci:
has_many :contents, -> { order(:position) }
Pour spécifier la direction de l'ordre, c'est-à-dire asc
ou desc
comme @ joshua-coady et @wsprujit l'ont suggéré, utilisez:
has_many :contents, -> { order 'position desc' }
ou, en utilisant le style de hachage:
has_many :contents, -> { order(position: :desc) }
Autres références sur Active Record Scopes for has_many
.
Il m'a fallu un certain temps pour comprendre comment passer une commande et l'inclure. J'ai finalement constaté que vous enchaînez la portée déclarations,
has_many :things, -> { includes(:stuff).order("somedate desc") }, class_name: "SomeThing"
Je pensais juste que j'ajouterais que si vous avez des arguments de hash optionnels, ils doivent aller après le lambda, comme ceci:
has_many :things, -> { order :stuff }, dependent: :destroy
Cela m’a pris une minute pour le comprendre moi-même - j'espère que cela aidera tout le monde à venir à cette question avec le même problème.
Cela fonctionne pour moi avec Rails 4 & MongoDB
has_many :discounts, order: :min_amount.asc