0

以下を実行したい:

ケース1:

x = Group.all[0].people
x.class
=> Array
x.order

大丈夫。:)

ケース2:

y = Person.all
y.class
=> Array
y.order
=> NoMethodError: undefined method `order' for #<Array:0x718c278>

:(

xとyの両方に、同じタイプのアイテム(Personモデルの束)が含まれています。なぜ配列をルビーで注文できないのですか?

前もって感謝します

4

2 に答える 2

4

Rails 3 では、メソッドall ( GitHub ) が配列を返すためです。オーダー方法ではご注文いただけません。

ソート方法を使用することもできますが、順序付けを行います。

は、さらにスコープを設定できるオブジェクトをpeople返します。ActiveRecord::Relation

幸いなことに、ActiveRecord::Relation並べto_a替えることができる配列を返すメソッドがあります。

于 2012-10-30T18:58:10.817 に答える
1

OK、Group.all.first.person は配列を返しません。あるように見えますが、実際には ActiveRecord AREL の一部であり、関係とスコープを連鎖させることができます。

を呼び出すときは#orderGroup.all.first.person実際には「注文」スコープを呼び出しており、クエリに人を何も注文しないように指示しています。

を呼び出すと、同じエラーが発生します。

Group.all.first.person.all.order
  NoMethodError: undefined method `order' for #<Array:0x007fe7dd03ff08>

重要なのは「#all」です。

ruby には "order" メソッドはありません。sort と sort_by があります

于 2012-10-30T18:58:26.027 に答える