我有一个名为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>
答案 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来部分加载应用程序,但在这种情况下模板无法查看应用程序对象或方法*