49

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

知道如何访问那里的路线助手吗?

4

2 回答 2

88

更新:现在有一个 gem 可以为您执行此操作:js-routes


问题是 Sprockets 正在评估您的 Rails 应用程序上下文之外的 ERB,而您所期望的大部分内容都不存在。

您可以像这样将内容添加到 Sprockets 上下文中:

Rails.application.assets.context_class.class_eval do
  include Rails.application.routes.url_helpers
end

这一切都很好,但是让需要 id 才能工作的助手有点棘手。我将使用一种称为URI 模板的技术:

var event_path = "<%= CGI.unescape event_path('{event_id}') %>";

它返回/events/{event_id}您可以使用像{ event_id: 1 }. 请参阅 SugarJS 的String#assign方法作为示例实现。你也可以像我一样滚动自己的。

于 2011-08-05T05:49:35.027 回答
1

您可以将文件移动到可以访问适当上下文的视图,然后将其从 JS 源标记拉到客户端。如果您正在编写引擎,参考 MyRailsApp::Application.routes.url_helpers 可能不是最好的。

于 2013-03-29T14:36:53.753 回答