4

在我的Rails 3.2應用程序(Ruby 1.9)中,當在Coffeescript中使用路徑助手時,出現以下錯誤。Rails path-helpers在js.coffee.erb中不起作用

undefined local variable or method `new_user_session_path' 

在我的部分_usermenu.html.haml工作正常:

= link_to t('user.login'), new_user_session_path 

在我的應用程序/資產/ JavaScript的/ metamenu.js.coffee.erb上述錯誤拋出:

$.get("<%= new_user_session_path %>") 

是不是可以在coffeescript erb中使用x_path和x_url助手?

回答

11

這是因爲您不在資產內的視圖上下文中。在文件中添加一個erb擴展並不會改變這個,它只是允許你評估嵌入式ruby。

如果這是一次性場景,最好的辦法就是簡單地使用字符串本身。

$.get("/sign_in") 

如果你真的想你可以創建一個部分是輸出腳本標記輸出的輔助方法,到JS變量和訪問他們的方式。

# in your layout 

<%= render 'url_helpers' %> 

# in app/views/layouts/_url_helpers.html.erb 

<script> 
    window.new_user_session_path = "<%= new_user_session_path %>"; 
    # add more if necessary 
</script> 

# in your coffeescript 

$.get(@new_user_session_path) 

另外值得牢記這顯然從不爲成員的工作路線在您傳遞模型的URL幫手的實例作爲那絕對是不可用的CoffeeScript。請記住,在生產資產中進行了預編譯,因此不能動態地使用任何東西。爲此,您只能真正依靠在控制器中設置操作來響應JS調用。

+0

非常感謝!這絕對有道理!我錯過的只是一個很好的解釋... :-) – 2013-02-26 19:29:46

+0

關於預編譯資產和使用任何動態的東西,你能否擴展你的評論?我正在嘗試(徒勞無功,迄今爲止)使用AJAX調用來更新正在我的主頁上呈現的圖像。當#home被擊中時,變量玩家被設置爲一個玩家對象,並且每個玩家都有一個相應的圖像被保存到/資產並且具有該玩家的名字的標題。當AJAX調用更新播放器的值時,我想更新主屏幕上顯示的圖像以對應@player的新值。我可以使用jQuery來插入帶有圖片標籤的HTML嗎?謝謝! – jackerman09 2013-10-15 18:16:24

+0

來自未來的另一個注意事項...您也可以在視圖中添加數據元素(如數據路徑),然後在js文件中抓取它。 – Jeff 2015-08-19 14:21:28

4

舊帖子,但仍可從Google訪問。

在軌道4(當然至少也3),你可以使用路由助手輕鬆插入你的js文件:

資產/ JavaScript的/ my_file.js.coffee.erb

<% self.class.include Rails.application.routes.url_helpers %> 
window.index_route = '<%= index_path %>'