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



我想执行以下操作:

案例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都包含相同类型的项目 - 一堆人模型。Ruby为什么不能订购数组?

预先感谢

,因为在导轨3中,方法all(github)返回一个数组。它不能用订单方法订购。

尽管您可以使用Sort方法来进行订购。

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

Fortunatelly ActiveRecord::Relation具有to_a方法,该方法将返回您可以排序的数组。

好的,所以group.all.first.person不会返回数组。看起来确实如此,但实际上,它是Activerecord Arel的一部分,它使您可以将关系和范围融合在一起。

当您在Group.all.first.person上调用#order时,您实际上是在调用"订单"范围,告诉查询以无需订购个人。

如果您致电

,您将遇到相同的错误
Group.all.first.person.all.order
  NoMethodError: undefined method `order' for #<Array:0x007fe7dd03ff08>

重要的是" #all"。

在Ruby中,没有"顺序"方法。有一种and_by

最新更新