有没有办法使用Rails辅助方法,更具体地说,是JavaScript资产文件中的路径辅助方法。这个文件foo.js.coffee.erb
$('#bar').val("<%= create_post_path %>")
如果可以从erubis获得,我会喜欢的
$('#bar').val("path/to/create")
有没有办法使用Rails辅助方法,更具体地说,是JavaScript资产文件中的路径辅助方法。这个文件foo.js.coffee.erb
$('#bar').val("<%= create_post_path %>")
如果可以从erubis获得,我会喜欢的
$('#bar').val("path/to/create")
Answers:
您可以在erb模板中包含以下任何帮助器/模块/类:
<% environment.context_class.instance_eval { include MyHelper } %>
看到: https //github.com/rails/sprockets/blob/master/lib/sprockets/environment.rb和https://github.com/rails/sprockets/blob/master/lib/sprockets/context.rb
要使用url帮助程序,您必须包括特定应用程序的帮助程序。
它们可在以下位置获得Rails.application.routes.url_helpers
:
<% environment.context_class.instance_eval { include Rails.application.routes.url_helpers } %>
编辑:固定链接到已移动的链回购,但不确定多年后仍然有意义。
Rails.application.routes.url_helpers
<% environment.context_class.instance_eval { include Rails.application.routes.url_helpers } %>
这也将在初始化程序中达到目的:
Sprockets::Context.send :include, MyHelper
在开发模式下,不会在每次请求时重新加载助手。
您需要使用UrlHelpers进行处理,直到找到为止post_path(...um...we don't know what post id we'll need at compile time...)
。有一个红宝石,可以在JavaScript中重新实现所有Rails UrlHelpers:https://github.com/railsware/js-routes
我不太确定,为什么要这么做。
您将阻止javascript文件被缓存,因为它包含动态值
您将在javascript / coffeescript和rails之间建立耦合
如果可能的话,我建议您通过在视图中提供目标路径来抽象问题,并在发生特定事件时从DOM元素中检索值。就像Rails的“ Unobtrusive脚本适配器”一样。例如:https : //github.com/rails/jquery-ujs/blob/master/src/rails.js#L157-173
asset_path
实际上,我同意@eirc的回答(考虑到Sprockets文档)。但是我会考虑在Rails引导时包括辅助模块。按照
# config/initializers/sprockets.rb
Rails.application.assets.context_class.instance_eval do
include ActionView::Helpers
include Rails.application.routes.url_helpers
include MyModule
end
这是因为:https : //github.com/rails/sprockets-rails/blob/master/lib/sprockets/railtie.rb#L23