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 模型。为什么ruby不能订购数组?

提前致谢

4

2 回答 2

4

因为在 Rails 3 中,方法all ( GitHub ) 返回一个数组。不能用 order 方法订购。

尽管您可以使用sort方法来进行排序。

people返回一个ActiveRecord::Relation可以进一步限定范围的对象。

幸运的是,ActiveRecord::Relationto_a方法将返回您可以排序的数组。

于 2012-10-30T18:58:10.817 回答
1

好的,所以 Group.all.first.person 不返回数组。看起来确实如此,但实际上它是 ActiveRecord AREL 的一部分,它允许您将关系和范围链接在一起。

当您调用#order时,Group.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 回答