在rails资产管道中的js.coffee文件中使用erb时出错
我有以下代码:
/assets/javascripts/home.js.coffee.erb
jQuery -> addClickListeners = -> $(document).on 'click', '#add-chord-link', addChord $(document).on 'click', '#remove-chord-link', removeChord addChord = (e) -> e.preventDefault() console.log("") console.log("") console.log('addChord clicked') $('#chord-choices').append('addedChord') removeChord = (e) -> e.preventDefault() $('#chord-choices select').last().remove() console.log('removeChord clicked') addClickListeners()
console.log("")
的控制台输出是/assets/rails.png
,这是我所期望的。 但是,每当我包含console.log("")
我在页面加载时收到错误说明:
undefined method `link_to' for #<#:0x007f9095b78ab8>
为什么这不起作用?
问题
原因是Sprockets,Assets pineline背后的gem,不依赖于Rails来处理erb。 查看可用的本地帮助程序https://github.com/sstephenson/sprockets#invoking-ruby-with-erb
Rails在ActiveSupport的Assets Pineline中添加了一些帮助器,你可以使用它们。 你可以在这里找到它们: http : //api.rubyonrails.org/classes/ActionView/Helpers/AssetUrlHelper.html
link_to
是属于ActionView的助手,因此它不包含在Assets Pineline中。
黑客
有一些解决方案允许您在Assets Pineline中使用ActionView助手:
在资产管道中路由助手
https://github.com/sstephenson/sprockets/issues/218
如何在资产管道中包含ActionView助手?
我的建议
如果你需要的只是有问题的链接或者更多,那就不需要麻烦了。 使用纯文本或Javascript助手。 这就够了。
//plain text "Sign up" //JS helper Link = {} Link.sign_up = "Sign up" Link.link_to = (url, anchor) -> "#{anchor}" console.log(Link.sign_up) console.log(Link.link_to("#", "Sign up"))
- 使用coffeescript延迟(去抖)ajax请求
- 如何在Rails 3.1 for CoffeeScript中使用选项“–bare”?
- Rails / Javascript:如何将rails变量注入(非常)简单的javascript中
- 使用CoffeeScript以编程方式检查复选框
- 在Rails 4中显示所选类别的子类别
- Rails 4 jQuery,javascript和咖啡脚本无法正常工作
- Marionette CompositeView为Collection中的每个Model而不是ItemView(Marionette Rails)渲染自己
- Rails 3.1。 如何防止Rails使用CoffeScript?
- Rails Turbolinks中的Facebook插件页面无法加载