0

ハッシュのインスタンス変数を作成する 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コードの割り当ての前にアラートを入れてみましたが、うまくいきました。そのため、ルビが埋め込まれた行で失敗しています。このフォーラムで、私が書いた埋め込み行は合法であると答える人を見てきました。これが機能しない理由はありますか?

4

2 に答える 2

5

通常の Javascript 構文規則に準拠する必要があります。 var x = <%= @sectionhash["name"] %>;が表示されます: var x = stringush;stringush と呼ばれる変数がないため、これは無効です。次のように JS 文字列を引用する必要があります。

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

これは印刷されます:var x = 'stringush';これはあなたが望むものです。

于 2013-02-15T17:53:36.267 に答える
2

あなたが探しているのはx、 string であることだと思います"stringush"。そのためには、JavaScript を次のように変更します。

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

そこに引用符を付ける必要があります。そうしないと、javascript になりvar x = stringush;、 という変数がないためstringush、 x は未定義になります。

于 2013-02-15T17:53:27.233 に答える