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 jette un avertissement lorsque j'essaye de créer des enregistrements dans la console.
DEPRECATION AVERTISSEMENT: Les options suivantes de votre déclaration RelatedList.has_many: contents sont obsolètes:: order. Veuillez utiliser un bloc de portée à la place. Par exemple, les éléments suivants: has_many: spam_comments, conditions: {spam: true}, class_name: 'Comment' doit être réécrit comme suit: has_many: spam_comments, -> {where spam: true}, class_name: 'Comment'. (appelé à partir de /Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7)
Il semble que Rails 4 a une nouvelle syntaxe: order à utiliser dans les modèles, mais je n'arrive pas à trouver la documentation dans les guides Rails.
la source
oder
etinclude
? Ceci:{ order(:position), include(:track) }
jette une erreur sur la virgule.-> { order(name: :asc) }
list.contents.order('position desc')
ce qui peut être globalement plus efficace, et pas comme modèle intrusif (dans la réponse votée, la liste connaît un champ de contenu, ici le contrôleur le sait )Il m'a fallu un certain temps pour comprendre comment commander et inclure, j'ai finalement trouvé que vous enchaîniez les déclarations de portée ,
la source
Je pensais juste que j'ajouterais que si vous avez des arguments de hachage d'options, ils doivent aller après le lambda, comme ceci:
Il m'a fallu une minute pour comprendre cela moi-même - j'espère que cela aidera quiconque à venir à cette question ayant le même problème.
la source
has_many :items, -> { order 'name' }, through: :suppliers
Cela fonctionne pour moi avec Rails 4 et MongoDB
la source
Vous pouvez également placer la
order
clause sur le modèle, par exemple:Devient
PS: je l'ai
ArgumentError: wrong number of arguments (1 for 0)
en faisanthas_many :things, -> {}
.la source