2014-09-24 75 views
0

我在我的軌控制器定義對講事件,像這樣:在腳本標籤使用Ruby變量

object_controller.rb

@object.save 
@intercom_event = 'object-saved' 

在存在於我的application.html.erb我想部分運行此腳本:

<script> 
    Intercom('trackEvent', '<%= @intercom_event %>'); 
</script> 

腳本運行並將事件發送到Intercom,就像它應該的那樣。我以爲我正確地將紅寶石變量放入<script>標記中,但@intercom_event的輸出爲:<%= @intercom_event %>,應該是:object-saved

此外,如果我是在一個if語句來包裝這個<script>標籤像這樣(所以它不會發送每一個頁面重新加載時間事件):

<% if @intercom_event.present? %> 
    <script> 
    Intercom('trackEvent', '<%= @intercom_event %>'); 
    </script> 
<% end %> 

它完全忽略了腳本,即使在定義@intercom_event時也是如此。

回答

2

得到它通過查看工作如果params爲當前,而不是@intercom_event變量

<% if params[:intercom].present? %> 
    <script> 
    Intercom('trackEvent', '<%= params[:intercom] %>'); 
    </script> 
<% end %> 
0

你在正確的軌道上:

<%- if @intercom_event.present? -%> 
    <%= javscript_tag do -%> 
    Intercom('trackEvent', '<%=j @intercom_event %>'); 
    <%- end -%> 
<%- end -%> 

j方法逃脫像h逃脫了HTML的伴隨方法的JavaScript環境。這對避免腳本錯誤非常重要。

對於更復雜的結構,@intercom_event.to_json會爲您提供JavaScript兼容的表示形式。

+0

嗯,還沒有包裹發送時,在'<% - 如果@ intercom_event.present? - %>'標記。當我刪除if語句時,它現在不發送任何內容。我想知道爲什麼在視圖文件中沒有看到控制器中定義的變量 – Reuben 2014-09-24 15:53:27

+0

控制器實例變量會自動傳播到視圖級別。你確定你正在採取正確的行動嗎?總是檢查'log/development.log'。 – tadman 2014-09-24 16:11:41