2011-09-16 38 views
0

選擇我有這樣Rails的ActiveRecord的:以特定的順序

order_id = 4 
Order.find(order_id, :select => 'orders.root_id, orders.lft, orders.rgt').attributes 

查詢返回類似

{"lft" => 1, "rgt" => 10, "root_id" => 9} 

,需要順序的數組:root_id,LFT,RGT。任何提示任何人?

+0

'{「lft」=> 1,「rgt」=> 10,「root_id」=> 9}'是一個哈希你希望它是數組嗎? – Bohdan

+0

邑,我需要[9,1,10] – Trevor

回答

1
attrs =Order.find(order_id, :select => 'orders.root_id, orders.lft, orders.rgt').attributes 
array = [attrs['root_id'], attrs['lft'], attrs['rgt']] 

呀?

+0

呃,很簡單... – Trevor

0

對於訂購,您可以應用sort方法獲得結果。

h = {"lft" => 1, "rgt" => 10, "root_id" => 9} 
h.sort { |x,y| y <=> x } 
=> [["root_id", 9], ["rgt", 10], ["lft", 1]] 


Order.find(order_id, :select => 'orders.root_id, orders.lft, orders.rgt').attributes.sort { |x,y| y <=> x } 
2

最簡單的按鈕,這裏是自己做的轉換,因爲你正在處理的一個記錄:

order_array = [order.root_id, order.lft, order.rgt] 

更大的問題可能是「爲什麼?」,答案很可能是你」重做錯誤™。

1
Order.find(order_id, 
      :select => 'orders.root_id, orders.lft, orders.rgt').attributes 
      .values_at("root_id", "lft", "rgt") 
+0

感謝您的編輯。 –