2017-01-23 82 views
2

我想通過我的咖啡腳本使用當前用戶。 但是,如果我嘗試在我的咖啡腳本中使用current_user,我會在瀏覽器的控制檯中獲取未定義的變量current_user。 有沒有什麼方法可以在咖啡腳本中訪問它? 我究竟想做的就是如下:在咖啡腳本中訪問導軌變量

current_user.updated_at < Date.now().getTime() 

這可能是一個愚蠢的問題,但無論如何,我需要它來實現它在我的Rails應用程序。

任何幫助將不勝感激。提前致謝。 :)

+0

你可以試試看這個gem https://github.com/gazay/gon。我自己並沒有使用過,但其他人偶爾也會推薦它。 – Iceman

+2

什麼是代碼行? :哦,我真的不明白你想做什麼..左邊是Ruby代碼,右邊是Javascript?! ლ(ಠ益ಠლ) – siegy22

回答

0

咖啡腳本轉換爲JavaScript並運行在瀏覽器上。你想要做的是將current_user.updated_at渲染成HTML中的節點,然後使用咖啡腳本來提取該值。

+0

感謝您的回覆。但是可以用其他方式嗎? – Vishal

1

對於原始的JavaScript + ERB

<script type="text/javascript"> 
    var my_foo = <%= some_ruby_expression %> 
</script> 

例如

<script type="text/javascript"> 
    var user_name = "<%= current_user.name %>"; 
</script> 

除了var關鍵字,我相信這是一個有效的coffeescript代碼。

順便說一句,這真的是你要求的嗎? - 我不知道 - ))

UPDATE

current_user是紅寶石/ active_record對象。您可以將它分配給一個JavaScript變量,但不能像您在Ruby中那樣使用。

但是,下面的代碼可能會給你一些想法。我創建了一個rails項目,並搭建了一個頁面模型。

<p id="notice"><%= notice %></p> 

<p> 
    <strong>Title:</strong> 
    <%= @page.title %> 
</p> 

<p> 
    <strong>Email:</strong> 
    <%= @page.email %> 
</p> 

<p> 
    <strong>Comments:</strong> 
    <%= @page.comments %> 
</p> 

<script type="text/javascript"> 
    var mypage = '<%= raw @page.to_json %>'; // attention to single quotes 
    console.log(mypage); 
</script> 

<%= link_to 'Edit', edit_page_path(@page) %> | 
<%= link_to 'Back', pages_path %> 

然後,你可以解析和使用它作爲一個普通的JavaScript對象。下圖顯示,我是如何做到的。

enter image description here

更新#2

做在CoffeeScript的文件。

window.onload = -> 
    myvar = '<%= raw @page.to_json %>' 
    myvarAsObj = JSON.parse(myvar) 
    do_something_with myvarAsObj 
    return 
+0

感謝您的回答,但我想使用'current_user',它是由設計寶石提供的助手變量。 – Vishal

+0

@ siegyy22不工作。但無論如何,即使做這個工作,我也必須把它寫在那個頁面本身。但我希望將它寫在.coffee.erb文件中。你有什麼想法嗎?謝謝:) – Vishal

+0

@ siegy22是的,我看到了你的答案。但我沒有在生產模式下運行該應用程序。 – Vishal

0

Javascript文件是(或多或少)將由瀏覽器執行的靜態文件。我不知道你是否曾經在生產中部署過Rails應用程序。您將運行命令bin/rake assets:precompile,該命令將生成一個(或多個)大量JavaScript文件。那麼你現在如何找出當前用戶呢?根本沒有HTTP請求,那麼怎麼會有用戶呢?

因此,要做到這一點,你既可以在當前用戶寫入HTML節點,然後通過JavaScript(CoffeeScript中)(這在我看來是最好的方式)看了一遍,或者你可以打印一個腳本標記成您的視圖包含用戶所需的內容。