質問: @model.sort{|a, b| a.code.to_i <=> b.code.to_i} ``` sort後の@modelのオブジェクトはArrayになっています。 **上記の観点から以下の不明点があるのですが、どなたかご存じの方はいらっしゃいますでしょうか。** * sortの後にArrayとなってしまうのはRails3以降の仕様変更によるものか * でなければ何故Rails3では元のオブジェクトのクラスインスタンスを保持できているのか * Rails3では使えた破壊的sortがRails5で使えなくなっているのはなぜか ネットで検索しても見つからないため、よろしくお願いいたします。
回答: リレーションの保持の仕方がRails 3と4以降では大きく異なっています。 Rails 3では**全部取得して**配列として保管しているのに対して、Rails 4以降では**どういうSQLを投げるか**だけ持っていて、データは実際に必要となってから取得してくる、という配列とは異なるオブジェクトとなっているのです。 > > sortの後にArrayとなってしまうのはRails3以降の仕様変更によるものか > > > いえ、これはRails 3でも変わらないかと思います。実際に呼び出しているのは`Enumerable#sort`という**Ruby標準の**メソッドで(るりま)、これは`Array`を返します。 > > でなければ何故Rails3では元のオブジェクトのクラスインスタンスを保持できているのか > > Rails3では使えた破壊的sortがRails5で使えなくなっているのはなぜか > > > Rails 3では、元のリレーションが配列の派生だからです