Deprecated warning for Rails 4 has_many with order

前端 未结 5 1830
情话喂你
情话喂你 2020-11-27 14:08
class RelatedList < ActiveRecord::Base
  extend Enumerize

  enumerize :list_type, in: %w(groups projects)

  belongs_to :content
  has_many :contents, :order =&g         


        
相关标签:
5条回答
  • 2020-11-27 14:26

    Alternatively, you can put the order clause on the model, for instance:

    has_many :options, order: 'name' # In class Answer
    

    Becomes

    has_many :options # In class Answer
    
    default_scope { order 'name' } # In class Option
    

    PS: I got ArgumentError: wrong number of arguments (1 for 0) when doing has_many :things, -> {}.

    0 讨论(0)
  • 2020-11-27 14:29

    This works for me with Rails 4 & MongoDB

    has_many :discounts, order: :min_amount.asc
    
    0 讨论(0)
  • 2020-11-27 14:39

    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"
    
    0 讨论(0)
  • 2020-11-27 14:50

    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) }
    

    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.

    0 讨论(0)
  • 2020-11-27 14:50

    Just thought I'd add that if you have any option hash arguments, they have to go after the lambda, like this:

    has_many :things, -> { order :stuff }, dependent: :destroy
    

    Took me a minute to figure this out myself - hopefully it helps anyone else coming to this question having the same problem.

    0 讨论(0)
提交回复
热议问题