在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"))