2012-03-12 38 views
1

我有一個名爲Blog的Rails安裝引擎。Rails引擎沒有在資源預編譯中加載

在模塊內部,我有一個名爲root_path的方法。該模塊加載引擎的根路徑。

module Blog 
    def self.root_path 
    Engine.routes.url_helpers.root_path 
    end 
end 

在Rails引擎的javascript資源中,我使用erb語法加載引擎的根url。就像下面一行:

url = <%= Blog.root_path %> 

當我運行,rake assets:precompile,我的應用程序裏面,我得到一個錯誤,該模塊中不包含這種方法。就像在預編譯資源之前不加載引擎庫一樣。

的錯誤是:

undefined method `root_path' for #< Module:0xc185e14> 

回答

2

雖然瑞恩的回答很有幫助,但這並不是我得到錯誤的原因。

原因是我在我的config/application.rb中將initialize_on_precompile設置爲false,所以我的應用程序沒有啓動。

Rails的明確指引規定:

*爲了更快的資產預編譯,可以部分地被配置/ application.rb中設置config.assets.initialize_on_precompile到假負載應用程序,但在這種情況下,模板無法看到應用程序對象或方法*

+0

是的,Rails引擎的實現很糟糕。 ;) – Macario 2012-10-10 18:34:52

+0

同樣,資產管道通常會造成比解決問題更多的麻煩。 – Macario 2012-10-10 18:38:59

2

Rails的引擎通過路由代理提供自己的路由助手。您不需要定義像這樣的root_path方法。

相反,調用哪個是你的引擎名稱的方法,然後在其上的路由助手這樣的:

blog.root_path 

欲瞭解更多信息,請閱讀Engines Guide

+0

當我運行rake資產時,我得到一個未定義的局部變量或方法名稱「blog」:precompile。在應用程序中,它工作正常。但是當我運行rake任務時不行。 – e3matheus 2012-03-12 18:45:05

+0

是的,它可以在您的應用程序的控制器/視圖內正常工作,但不應該在資產中引用它。如果你想資產資產的引擎路徑[它更復雜一點](https://github.com/kunalchaudhari/spree/blob/266180a69daee79fe462bd8747b92066a34f0ec2/core/app/assets/javascripts/store/helpers.js.erb) 。 – 2012-03-12 23:29:33

相關問題