在资产管道中路由助手

时间:2011-07-17 17:48:17

标签: javascript ruby-on-rails-3 assets asset-pipeline

使用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)")

知道如何在那里访问路由助手吗?

2 个答案:

答案 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可能不是最好的。