资产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可能不是最好的,如果你正在编写一个引擎。

Interesting Posts