2012-01-16 51 views
0

我使用的祖先寶石和我正在一個undefined method "arrange" for #<Array:0x007f8d58e58700>錯誤與下面的代碼:祖先寶石「未定義的方法」的錯誤

<%= @shipmgr_carriers.arrange(:order => :name) %> 

然而,當我只輸出@shipmgr_carriers我得到一個數組與祖先:

[#<Shipmgr::Carrier id: 9, name: "testing", status: nil, created_at: "2012-01-16 22:44:28", updated_at: "2012-01-16 22:44:28", ancestry: nil>, #<Shipmgr::Carrier id: 10, name: "test", status: nil, created_at: "2012-01-16 22:44:28", updated_at: "2012-01-16 22:44:28", ancestry: "9">] 

誰能告訴我爲什麼我無法調用數組變量的.arrange方法嗎?

回答

1

我沒有使用Ancestry,但它看起來像它將arrange方法添加到ActiveRecord :: Base。它不會將此方法添加到數組,因此您不應該期望它可以在數組上工作。

我假設你在你的控制器是這樣的聲明@shipmgr_carriers

class SomeController < ActionController::Base 
    def some_action 
    @shimgr_carriers = SomeModel.find(...).carriers 
    end 
end 

試試這個:

def some_action 
    @shipmgr_carriers = SomeModel.find(...).carriers 

    @shipmgr_carriers_arranged = @shipmgr_carriers.arrange(...) 
end 

我的直覺是,到時候@shipmgr_carriers到達您的看法該查詢已經運行,將其轉換爲結果數組而不是關係。

這是邏輯,應該可能在控制器中完成,所以無論如何將它移出視圖都是一個好主意。

0

arrange()方法既可以在類級別上執行,也可以在命名範圍內執行,而不是在返回的值數組上執行。例如,如果你想打電話安排()上一個名爲「活動」表,這會工作,並以排列格式返回整個表:

Activity.arrange 

不過,如果你想打電話安排在特定的樹你會去:

Activity.find(...).subtree.arrange 

'子樹'是由has_ancestry gem提供的命名範圍。因此,安排()方法應該爲以下命名範圍工作:

  • 祖先
  • 孩子
  • sibblings
  • 後裔
相關問題