2013-02-15 111 views
0

我有一個紅寶石函數創建一個哈希的實例變量,我有麻煩accesing它的JavaScript內的值。嵌入紅寶石的JavaScript,紅寶石不承認

這是我的控制器:

class TransferController < ApplicationController 
    def index 
     require 'json' 
     #@transfers = Transfer.select("transfer_id,section_id,sum(net) as net").group("transfer_id,section_id").having("sum(net) <> ?",0).order("transfer_id ASC") 
     @transfers = Transfer.select("section_id,section_name,sum(net) as net").group("section_id,section_name").order("section_id ASC") 

     h = Hash.new() 
     a = [] 

     @transfers.each do |section| 
      h["name"] = section.section_name 
      h["size"] = section.net 
      a.insert(h) 
     end 

     @sectionhash = Hash.new() 
     @sectionhash["name"] = "stringush" 
     @sectionhash["children"] = a 


    end 
end 

,這是我的看法:

<h1><%= @sectionhash["name"] %></h1> 

<script src="http://d3js.org/d3.v3.min.js"></script> 
<script type="text/javascript"> 
var x = <%= @sectionhash["name"] %>; 
alert(x); 
</script> 

的reuslt我得到的是,顯示我的散列內的值,但JavaScript並沒有什麼。我甚至試圖在Ruby代碼的分配之前加入一個警報,它工作。所以它不符合嵌入式ruby。 我見過這個論壇的人回答說我寫的嵌入式行是合法的。 任何想法,爲什麼這不工作?

回答

5

你仍然需要遵守正常的Javascript synax規則。 var x = <%= @sectionhash["name"] %>;將打印:var x = stringush;由於沒有變量稱爲stringush而無效。你需要引用的JS字符串,像這樣:

var x = '<%= @sectionhash["name"] %>';

這將打印:var x = 'stringush';這是你想要的。

2

我認爲你要找的是x是字符串"stringush"。爲此,改變你的JavaScript來:

<script type="text/javascript"> 
    var x = '<%= @sectionhash["name"] %>'; 
    alert(x); 
</script> 

您需要報價在那裏和JavaScript將是var x = stringush;和因爲沒有所謂的stringush變量x將是不確定的。