class RelatedList < ActiveRecord::Base
extend Enumerize
enumerize :list_type, in: %w(groups projects)
belongs_to :content
has_many :contents, :order => :position
end
コンソールでレコードを作成しようとすると警告がスローされるRailsアプリにこのモデルがあります。
廃止の警告:RelatedList.has_many:contents宣言の次のオプションは廃止されました::order。代わりにスコープブロックを使用してください。たとえば、has_many:spam_comments、conditions:{spam:true}、class_name: 'Comment'は、has_many:spam_comments、-> {where spam:true}、class_name: 'Comment'のように書き換える必要があります。 (/Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7から呼び出されます)
Rails 4にはモデルで使用するための新しい:order構文があるようですが、Rails Guidesでドキュメントを見つけることができないようです。
Rails 4では、:order
が非推奨になりました。質問で投稿した警告に示されているように、ラムダスコープブロックに置き換える必要があります。別の注意点は、dependent: :destroy
などの他の関連付けオプションの前にこのスコープブロックを渡す必要があることです。
これを試してみてください:
has_many :contents, -> { order(:position) }
順序の方向、つまり@ joshua-coadyと@wsprujitが提案したようにasc
またはdesc
を指定するには、次を使用します。
has_many :contents, -> { order 'position desc' }
または、ハッシュスタイルを使用します。
has_many :contents, -> { order(position: :desc) }
has_many
のアクティブレコードスコープ の詳細なリファレンス。
順序付けとインクルードの方法を理解するのにしばらく時間がかかりました。最終的に、あなたは scope ステートメントをチェーンすることがわかりました。
has_many :things, -> { includes(:stuff).order("somedate desc") }, class_name: "SomeThing"
オプションハッシュ引数がある場合は、次のようにラムダの後に移動する必要があると付け加えます。
has_many :things, -> { order :stuff }, dependent: :destroy
自分でこれを理解するのに少し時間をかけました-うまくいけば、同じ問題を抱えているこの質問に来ている人の助けになります。
これはRails 4およびMongoDBで動作します
has_many :discounts, order: :min_amount.asc