2012-10-30 45 views
0

我想要执行以下操作:轨道/红宝石NoMethodError:为#未定义的方法`顺序” <阵列:0x718c278>

壳体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都包含相同类型的项目 - 一堆人车型的 为什么不能红宝石顺序排列

由于提前

+1

你在找'sort'吗? –

+0

版本的铁轨?所有的方法也会触发查询。所以你不能申请订单,在组类或人员,你可以申请订单,这将启动命令 –

+0

我需要执行people.order(“upper(last_name),upper(first_name)”),其中人是阵列。那么排序的等价物是什么? –

回答

4

由于导轨3的方法all在(GitHub )返回一个数组。它不能用订购方法订购。

虽然您可以使用sort方法做到这一点。

people返回一个ActiveRecord::Relation对象,然后可以进一步作用域。

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

+0

酷感谢的人 –

1

好的,所以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”的事项,你会得到同样的错误。

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

+0

很酷很高兴知道,谢谢 –

相关问题