Rails Engine未加载到资产预编译中

时间:2012-03-12 17:32:08

标签: ruby-on-rails ruby assets rails-engines

我有一个名为Blog的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 个答案:

答案 0 :(得分:2)

Rails引擎通过路由代理提供路由助手。您无需像这样定义root_path方法。

相反,调用引擎名称的方法,然后调用路由助手,如下所示:

blog.root_path

有关详情,请参阅Engines Guide

答案 1 :(得分:2)

尽管Ryan的答案很有帮助,但这并不是我收到错误的原因。

原因是我在config / application.rb中将initialize_on_precompile设置为false,因此我的应用程序没有启动。

Rails指南明确指出:

*对于更快的资产预编译,您可以通过在config / application.rb中将config.assets.initialize_on_precompile设置为false来部分加载应用程序,但在这种情况下模板无法查看应用程序对象或方法*