资产pipe道中的辅助线路
使用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)")
任何想法如何访问在那里的路线帮手?
更新:现在有一个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 }
类的对象将其呈现为url。 请参阅SugarJS的String#assign方法作为此示例的实现。 你也可以像我一样推出自己的产品 。
您可以将文件移动到可访问正确上下文的视图,然后从JS源标签中将其拖放到客户端。 参考MyRailsApp :: Application.routes.url_helpers可能不是最好的,如果你正在编写一个引擎。