class RelatedList < ActiveRecord::Base
extend Enumerize
enumerize :list_type, in: %w(groups projects)
belongs_to :content
has_many :contents, :order => :position
end
I have this model in my rails app which throws warning when I try to create records in console.
DEPRECATION WARNING: The following options in your RelatedList.has_many :contents declaration are deprecated: :order. Please use a scope block instead. For example, the following: has_many :spam_comments, conditions: { spam: true }, class_name: 'Comment' should be rewritten as the following: has_many :spam_comments, -> { where spam: true }, class_name: 'Comment' . (called from at /Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7)
It seems like Rails 4 has new :order syntax for use in models but I can't seem to find the documentation in Rails Guides.
In Rails 4, :order
has been deprecated and needs to be replaced with lambda scope block as shown in the warning you've posted in the question. Another point to note is that this scope block needs to be passed before any other association options such as dependent: :destroy
etc.
Give this a try:
has_many :contents, -> { order(:position) } # Order by :asc by default
To specify order direction, i.e. either asc
or desc
as @joshua-coady and @wsprujit have suggested, use:
has_many :contents, -> { order 'position desc' }
or, using the hash style:
has_many :contents, -> { order(position: :desc) }
Further reference on Active Record Scopes for has_many
.
It took me a while to figure out how to do order and include, I eventually found that you chain the scope statements,
has_many :things, -> { includes(:stuff).order("somedate desc") }, class_name: "SomeThing"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With