资产管道中的路由助手
Posted
技术标签:
【中文标题】资产管道中的路由助手【英文标题】:Route helpers in asset pipeline 【发布时间】:2011-10-07 05:25:16 【问题描述】:使用 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)")
知道如何访问其中的路由助手吗?
【问题讨论】:
我在 Rails 3.1 稳定版中遇到了同样的问题。有人知道如何解决这个问题吗? 【参考方案1】:更新:现在有一个可以为您执行此操作的 gem: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
之类的对象将其呈现为url。请参阅 SugarJS 的 String#assign 方法作为示例实现。你也可以像我一样roll your own。
【讨论】:
唷,原谅这么晚的接受。听起来很合理,谢谢! 太棒了!正是我想要的! @MildFuzz 这是你在创建项目时给它起的名字。如果您不记得,请查看config/application.rb
。
有更好的方法吗?我用这个::Rails.application.routes.url_helpers.new_user_session_path
@Nick 老实说我无法想象这会成为一个问题。【参考方案2】:
您可以将文件移动到可以访问适当上下文的视图中,然后将其从 JS 源标记拉到客户端。如果您正在编写引擎,参考 MyRailsApp::Application.routes.url_helpers 可能不是最好的。
【讨论】:
你可以做 [EngineName]::Engine.routes.url_helpers以上是关于资产管道中的路由助手的主要内容,如果未能解决你的问题,请参考以下文章
Play Framework [2.4.x] - 模块路由特定名称因“资产不是包的成员”而失败