使用Rails 3.1.0.rc4,我正在尝试访问javascript文件中的路由助手(在本例中为event.js.erb),看起来它们当时没有加载。当请求合并的/assets/application.js文件时,我得到:
using Rails 3.1.0.rc4, I'm trying to access a route helper in a javascript file (event.js.erb in this case) and it seems like they are not loaded at that moment. When requesting the merged /assets/application.js file, I get:
throw Error("NameError: undefined local variable or method `events_path' for #<#<Class:0x00000001580010>:0x00000003191510>\n (in /<...>/app/assets/javascripts/event.js.erb)")知道如何在那里访问路线助手吗?
Any idea how to access the route helper in there?
推荐答案更新:现在有一个宝石可以帮到你: js -routes
UPDATE: Now there is a gem that does this for you: js-routes
问题是Sprockets正在评估Rails应用程序上下文之外的ERB,你所期待的大部分东西都不存在。
The problem is that Sprockets is evaluating the ERB outside of the context of your Rails app, and most of the stuff you're expecting isn't there.
你可以像你这样在Sprockets上下文中添加东西:
You can add things to your Sprockets context like so:
Rails.application.assets.context_class.class_eval do include Rails.application.routes.url_helpers end这一切都很好,但是获得需要id工作的助手却有点棘手。我将使用一种名为 URI模板的技术:
That's all well and good, but getting the helpers that require an id to work is a little trickier. I'm going to use a technique called a URI Template:
var event_path = "<%= CGI.unescape event_path('{event_id}') %>";返回 / events / {event_id} 您可以使用像 {event_id:1} 这样的对象将其呈现到网址中。请参阅SugarJS的 String#assign 方法作为此示例实现。您也可以像我一样推出自己的做了。
which returns /events/{event_id} which you could render into a url using an object like { event_id: 1 }. See SugarJS's String#assign method as example implementation of this. You could also roll your own like I did.
更多推荐
在资产管道中路由助手
发布评论