Pass multiple variables to render json in rails cotroller

210 views
Skip to first unread message

Hemant Bhargava

unread,
Apr 10, 2015, 2:01:55 PM4/10/15
to rubyonra...@googlegroups.com
I am trying to pass the data from controller to javascript. This is how
you do it,

respond_to do |format|
format.html
format.json { render json: {data: @data} }
end
And then in your view file, you should do this:

<%= javascript_tag do%>
window.data = <%= raw @data.to_json %>
<%end%>

<script>
for( i = 0; i < data.length; i++ ) {
alert(data[i]);
}
</script>
Make sense. Right?

However, above code is when you are passing only one variable in json
code i.e. data variable. What I need to do is to pass multiple variables
to my javascript code.

It should be done as:

respond_to do |format|
format.html
format.json { render json: {all_data: {data: @data, data1: @data1,
data2: @data2}}}
end

Now, - How should I access the data1 & data2 variables in my view file?

My view file has:

<%= javascript_tag do%>
window.data = <%= raw @all_data.to_json %>
<%end%>

<script>
for( i = 0; i < all_data.length; i++ ) {
alert(all_data[i]);
}
</script>

Above alerts me NULL. What have I done wrong? Where have I messed up?

Any leads would be appreciated.

Cheers!

--
Posted via http://www.ruby-forum.com/.

Dmitry Shvetsov

unread,
Apr 11, 2015, 10:26:13 PM4/11/15
to rubyonra...@googlegroups.com
Hi, your view is html?

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/ecd6b0881176c5efc058d342b2eeb895%40ruby-forum.com.
For more options, visit https://groups.google.com/d/optout.

Dmitry Shvetsov

unread,
Apr 11, 2015, 10:44:22 PM4/11/15
to rubyonra...@googlegroups.com
Controllers with respond_to format block responds with one format for each request. I belief you requested html format so this should works for you:

<pre style='color:#000000;background:#ffffff;'><html><body style='color:#000000; background:#ffffff; '><pre>
respond_to<span style='color:#800000; font-weight:bold; '> do</span> |format|
  format<span style='color:#808030; '>.</span>html <span style='color:#800080; '>{</span> @all_data <span style='color:#808030; '>=</span> <span style='color:#800080; '>{</span><span style='color:#005fd2; '>data</span>: @data<span style='color:#808030; '>,</span> <span style='color:#005fd2; '>data1</span>: @data1<span style='color:#808030; '>,</span> <span style='color:#005fd2; '>data2</span>: @data2<span style='color:#800080; '>}</span> <span style='color:#800080; '>}</span>
  <span style='color:#696969; '># if you still need respond to json you should uncomment/not delete next line</span>
  <span style='color:#696969; '># format.json { render json: {all_data: {data: @data, data1: @data1, data2: @data2}}}</span>
<span style='color:#800000; font-weight:bold; '>end</span>
</pre>

Dmitry Shvetsov

unread,
Apr 11, 2015, 10:45:08 PM4/11/15
to rubyonra...@googlegroups.com
sorry, this should be more readable

respond_to do |format|
  format.html { @all_data = {data: @data, data1: @data1, data2: @data2} }
  # if you still need respond to json you should uncomment/not delete next line
  # format.json { render json: {all_data: {data: @data, data1: @data1, data2: @data2}}}
end
Reply all
Reply to author
Forward
0 new messages