Deprecated warning for Rails 4 has_many with order

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.

Leave a Comment