2013-08-17 21 views
86
class RelatedList < ActiveRecord::Base 
    extend Enumerize 

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

    belongs_to :content 
    has_many :contents, :order => :position 

end 

私はコンソールでレコードを作成しようとすると警告をスローする私のレールアプリでこのモデルを持っています。Rails 4の廃止予定警告:注文とのhas_many

注意:あなたの RelatedList.has_many:contents宣言の次のオプションは、推奨されません::order。 代わりにスコープブロックを使用してください。たとえば、次のようになります。has_many :spam_comments、条件:{spam:true}、class_name: 'Comment' は、has_many:spam_comments、 - > { 、spam:true}、class_name: 'Comment ' 。モデルで使用するための構文が、私がすることはできません:Railsの4は新しい持っているよう

それはそうです(/Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7でから呼び出されます) Railsガイドでドキュメントを見つけたようです。

答えて

214

Rails 4では、:orderは推奨されておらず、質問に投稿した警告のように、ラムダスコープブロックで置き換える必要があります。注意すべきもう一つのポイントは、このスコープのブロックがなどdependent: :destroy

などの他の関連オプションの前に渡される必要があるということである。この試してみる:

has_many :contents, -> { order(:position) } 

が順方向、すなわちいずれかascdescなどを指定するには@ジョシュア・coadyと@wsprujitは、使用することを示唆している:

has_many :contents, -> { order 'position desc' } 

や、ハッシュスタイルを使用して:

has_many :contents, -> { order(position: :desc) } 

さらに参考文献Active Record Scopes for has_manyを参照してください。

+3

がすばらしい!ガイドやドキュメントでこのような情報はどこにありますか?私は1つを見つけることができません。ありがとう。 – shankardevy

+1

[ガイドの注文範囲に関する情報](http://guides.rubyonrails.org/association_basics.html#scopes-for-has-many-order) –

+4

廃止予定のオプションが2つ以上ある場合、 'oder 'と' include'?これは: '{order(:position)、include(:track)}'はコンマにエラーを投げます。 – kakubei

26

それが注文を行うと、含める方法を見つけ出すために私にしばらく時間がかかった、私は最終的にあなたchain the scope文、また

has_many :things, -> { includes(:stuff).order("somedate desc") }, class_name: "SomeThing" 
+0

これはまさに私の問題でした。親属性でhas_many関係を順序付ける方法を理解しようとしています。あなたがこのようにして注文することができることを理解できませんでした。ありがとう! – timothyashaw

-4

は、インスタンスのために、モデルにorder句を置くことができることがわかった。

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

になり

has_many :options # In class Answer 

default_scope { order 'name' } # In class Option 

P S:has_many :things, -> {}を実行するとArgumentError: wrong number of arguments (1 for 0)になりました。

+4

デフォルトスコープを使用しないでください。あなたがそれをするのに慣れていれば、その魔法の方法をもっと論理に加えることができます。それを将来上書きするのは難しいです。 –

13

はちょうど私がこのように、あなたがどんなオプションのハッシュ引数を持っている場合、彼らはラムダ後に行かなければならないことを追加しようと思いました:

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

は自分自身をこれを理解するために私に分を取った - うまくいけば、それが役立ちます同じ問題を抱えている他の誰かがこの質問に答えます。

+0

これは、オブジェクト上に存在する可能性のある「スルー」アソシエーション(has_many:items、 - > {order 'name'}) –

関連する問題