0

I've got a ruby function creating an instance variable of a hash and i'm having trouble accesing it's values inside javascript.

this is my controller:

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

and this is my view:

<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>

The reuslt i get is that the shows me the value inside of the hash but the javascript does nothing. i even tried putting an alert before the assignment of the ruby code and it worked. so it's failing at the line with the embedded ruby. I've seen people answer in this forum that the embedded line i wrote is legal. Any ideas why this isn't working?

asked Feb 15, 2013 at 17:47

2 Answers 2

5

You still need to comply with normal Javascript synax rules. var x = <%= @sectionhash["name"] %>; will print: var x = stringush; which is invalid due to no variable called stringush. You need to quote the JS string like so:

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

This will print: var x = 'stringush'; which is what you want.

answered Feb 15, 2013 at 17:53
Sign up to request clarification or add additional context in comments.

Comments

2

I think what you're looking for is for x to be the string "stringush". For that, change your javascript to:

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

You need to quotes in there or the javascript will be var x = stringush; and since there's no variable called stringush, x will be undefined.

answered Feb 15, 2013 at 17:53

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.