2012-10-30 46 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

很酷很高興知道,謝謝 –

相關問題