2012-01-23 22 views
1

我有一個Web應用程序,其中包含大約1200個類別的主頁上發佈的類別樹。此類別樹使用acts_as_tree(parent_id等)構建,它使用<ul><li>在html中構建樹。Rails:在服務器啓動時預加載/創建部分服務

如果我直接發佈樹,它的效果非常好,但實際上非常慢(加載時間約爲4秒),這對於主頁顯然不合適。

好的是,這個類樹很少改變,所以它可以在服務器啓動時建立。因此,我所做的就是創建一個初始化器category_tree.rb並將其放入初始化器文件夾中。

我做了一個全局變量$ category_tree和「插入HTML」中就有的排序是這樣的(這是一個過於簡單的例子):

def create_tree(categories) 
    ret = '<ul>' 
    categories.each do |cat| 
    ret = "<li><a href='" + cat.url + "'>" + cat.name + "</a>" 
    end 
    ret = '</ul>' 
end 

$category_tree = create_tree(Category.all) 

,然後在我的索引視圖我簡單地說:

<%= $category_tree %> 

這一切正常!它加載速度快並且正確。但是,我有一些問題,我想一些幫助:

  1. 使用<a href>不會在長期運行非常穩定。我更喜歡使用link_to和路徑,但問題是我的初始化程序在routes.rb之前加載它似乎。這使得例如不可能調用category_path。我該如何解決這個問題?我怎樣才能加載後的routes.rb category_tree.rb加載?

  2. 我不知道如果使用這樣的全局變量是非常聰明的。我想象它會一直在內存中保留我的分類樹HTML,我認爲這不是太聰明。它是否正確?

我更喜歡的是在啓動時創建一個包含我可以使用路徑/路徑的html類別樹的部分。不需要在內存中保留任何內容的解決方案。我該如何解決這個問題?

回答

相關問題