簡體   English   中英

在Rails資產管道中的js.coffee文件中使用erb時出錯

[英]Error using erb in js.coffee files in the rails asset pipeline

我有以下代碼:

/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("<%= asset_path('rails.png') %>")
        console.log("<%= link_to 'Sign up now!', '#' %>")
        console.log('addChord clicked')
        $('#chord-choices').append('addedChord')

    removeChord = (e) ->
        e.preventDefault()
        $('#chord-choices select').last().remove()
        console.log('removeChord clicked')

    addClickListeners()

console.log("<%= asset_path('rails.png') %>")的控制台輸出是/assets/rails.png ,這是我所期望的。 但是,每當我包含console.log("<%= link_to 'Sign up now!', '#' %>")時,頁面加載時都會報錯:

    undefined method `link_to' for #<#<Class:0x007f9095960938>:0x007f9095b78ab8>

為什么這不起作用?

問題

原因是資產Propines背后的瑰寶Sprockets不依賴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
"<a href='#'>Sign up</a>"

//JS helper
Link = {}
Link.sign_up = "<a href='#'>Sign up</a>"
Link.link_to = (url, anchor) ->
  "<a href=\"#{url}\">#{anchor}</a>" 

console.log(Link.sign_up)
console.log(Link.link_to("#", "Sign up"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM