2017-10-11 87 views
0

我有一些很少更改的表。不幸的是,我需要在控制器中經常調用這些表格,這會增加某些頁面的加載時間。例如,在一個控制器我有:Rails:有沒有辦法在初始化時加載數據庫信息?

class PagesController < ApplicationController 
    def index 
     @groups = Group.all 
     @events = Event.all 
    end 
end 

然後,它發生,我認爲因爲羣體,很少活動的變化,我可以在初始化或爲常數,使他們實際上並不需要加載這些變量的模型在此刻查詢數據庫。我將上面的內容更改爲以下內容:

class Group < ApplicationRecord 
    ALL = Group.all 
end 
class Event < ApplicationRecord 
    ALL = Event.all 
end 

class PagesController 
    def index 
     @groups = Group::ALL 
     @events = Event::ALL 
    end 
end 

上述解決方案實際上在開發中起作用。然而,在Heroku上的生產中,它將變量加載到控制器中。我也嘗試設置一個初始化程序並定義了::Groups = Group.all,但是這仍然會在控制器中調用時加載數據。有什麼方法可以在初始化時以加載Heroku的方式加載數據庫信息?

回答

0

不幸的是,你沒有指定表的大小。 如果它們尺寸適中,我會使用Rails.cache來代替記憶控制器中的提取。

你可以在這裏閱讀更多詳細信息:

https://devcenter.heroku.com/articles/caching-strategies#low-level-caching

通過數據應該memoized作爲類變量不是實例變量的方法(我也將存儲Foo.all.to_a - 所以陣列代替AR關係)。
雖然我不建議這樣做,因爲我不知道Heroku多久可以重新加載應用程序。 另外它肯定是黑客和Rails.cache確實是更好的實現這種緩存的方法。此外,它提供了一種無效的方法。

相關問題