在javascript中嵌入ruby,ruby无法识别

时间:2013-02-15 17:47:02

标签: javascript ruby-on-rails

我有一个ruby函数创建一个哈希的实例变量,我在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>

我得到的重点是,它显示了哈希内部的值,但javascript什么也没做。我甚至尝试在分配ruby代码之前发出警报并且它有效。所以它与嵌入式红宝石的线路失败了。 我见过人们在这个论坛上回答我写的嵌入式线是合法的。 任何想法为什么这不起作用?

2 个答案:

答案 0 :(得分:5)

您仍然需要遵守常规的Javascript synax规则。 var x = <%= @sectionhash["name"] %>;将打印:var x = stringush;由于没有名为stringush的变量而无效。你需要像这样引用JS字符串:

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

这将打印:var x = 'stringush';这就是你想要的。

答案 1 :(得分:2)

我认为您要找的是x为字符串"stringush"。为此,请将您的javascript更改为:

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

你需要在那里引用或者javascript将是var x = stringush;,因为没有名为stringush的变量,x将是未定义的。