使用Rails 3.1.0.rc4,我正在尝试访问javascript文件中的路由助手(在本例中为event.js.erb),看起来它们当时没有加载。在请求合并的/assets/application.js文件时,我得到:
throw Error("NameError: undefined local variable or method `events_path' for #<#<Class:0x00000001580010>:0x00000003191510>\n (in /<...>/app/assets/javascripts/event.js.erb)")
知道如何在那里访问路由助手吗?
答案 0 :(得分:88)
更新:现在有一个宝石为你做这个:js-routes
问题是Sprockets正在评估Rails应用程序上下文之外的ERB,而且你期望的大部分内容都不存在。
您可以像下面这样在Sprockets上下文中添加内容:
Rails.application.assets.context_class.class_eval do
include Rails.application.routes.url_helpers
end
这一切都很好,但是获得需要id工作的助手却有点棘手。我将使用一种名为URI Template的技术:
var event_path = "<%= CGI.unescape event_path('{event_id}') %>";
返回/events/{event_id}
,您可以使用{ event_id: 1 }
之类的对象将其渲染到网址中。请参阅SugarJS的String#assign方法作为此示例实现。你也可以像我一样roll your own。
答案 1 :(得分:1)
您可以将文件移动到可以访问正确上下文的视图,然后从JS源标记将其下拉到客户端。如果您正在编写引擎,请参阅MyRailsApp :: Application.routes.url_helpers可能不是最好的。