Rails / Ruby NoMethodError:#array的未定义方法`order':0x718c278> </array:0x718c278>

时间:2012-10-30 18:40:35

标签: ruby-on-rails ruby undefined runtime-error

我想执行以下操作:

案例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不能对数组进行排序?

先谢谢

2 个答案:

答案 0 :(得分:4)

因为在Rails 3中,方法allGitHub)返回一个数组。它不能与订购方法一起订购。

虽然你可以使用sort方法来做订购。

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

幸运的是ActiveRecord::Relationto_a方法会返回一个你可以排序的数组。

答案 1 :(得分: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”。

在红宝石中,没有“订单”方法。有一个sort和sort_by