class RelatedList < ActiveRecord::Base
extend Enumerize
enumerize :list_type, in: %w(groups projects)
belongs_to :content
has_many :contents, :order => :position
end
Eu tenho este modelo em meu aplicativo rails que lança um aviso quando tento criar registros no console.
AVISO DE DEPRECAÇÃO: As seguintes opções em sua declaração RelatedList.has_many: contents estão obsoletas:: order. Em vez disso, use um bloco de escopo. Por exemplo, o seguinte: has_many: spam_comments, conditions: {spam: true}, class_name: 'Comentário' deve ser reescrito como o seguinte: has_many: spam_comments, -> {where spam: true}, class_name: 'Comment'. (chamado em /Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7)
Parece que o Rails 4 tem uma nova: sintaxe de ordem para uso em modelos, mas não consigo encontrar a documentação nos Guias do Rails.
fonte
oder
einclude
? Este:{ order(:position), include(:track) }
lança um erro na vírgula.-> { order(name: :asc) }
list.contents.order('position desc')
que pode ser mais eficiente no geral, e não como um modelo intrusivo (na resposta votada, a lista conhece um campo de conteúdo, aqui o controlador o conhece )Levei um tempo para descobrir como fazer o pedido e incluir, acabei descobrindo que você encadeia as declarações de escopo ,
fonte
Apenas pensei em acrescentar que, se você tiver qualquer opção de argumentos de hash, eles devem ir depois do lambda, assim:
Levei um minuto para descobrir isso sozinho - espero que ajude qualquer pessoa que tenha o mesmo problema com essa pergunta.
fonte
has_many :items, -> { order 'name' }, through: :suppliers
Isso funciona para mim com Rails 4 e MongoDB
fonte
Alternativamente, você pode colocar a
order
cláusula no modelo, por exemplo:Torna-se
PS: Eu tenho
ArgumentError: wrong number of arguments (1 for 0)
ao fazerhas_many :things, -> {}
.fonte