2

I want to access a Ruby array in javascript. Please tell me the method to do that. My array is holding the result of a sql query.

 @contacts = Contact.order("contacts.position ASC")

I am trying to do this....

for(var i=0; i< a; i++)
 { 
 var firstnameV = "<%=Contact.order('contacts.position ASC')[i].first_name%>";
 var lastnameV = "<%=Contact.order('contacts.position ASC')[i].last_name%>";
 var emailV = "<%=Contact.order('contacts.position ASC')[i].email%>";
 var contactV = parseInt("<%=Contact.order('contacts.position ASC')[i].contact_no%>";
 var posV = parseInt("<%=Contact.order('contacts.position ASC')[i].position%>"; 
 tx.executeSql('INSERT INTO contact_table (firstname, lastname, email, contact, pos)
 VALUES (firstnameV,lastnameV, emailV, contactV, posV)');
 }
Arjan
23.8k12 gold badges65 silver badges71 bronze badges
asked Feb 3, 2011 at 8:42
2
  • 2
    Just render json and access it through ajax Commented Feb 3, 2011 at 8:44
  • 1
    @apneadiving Could you please show the steps. I am totally new at rails and ajax. Commented Feb 3, 2011 at 9:07

3 Answers 3

4

Quick example of how you can render the value of Ruby variable to JavaScript. Add <%= yield :head %> to head tag in views/layouts/application.html.erb. Then in views/contacts/index.erb (or whatever view you use) add the following:

<%content_for :head do %>
<script type="text/javascript">
window.onload = function() {
 alert("First contact in database is <%=Contact.order('contacts.position ASC').first.name%>")
}
</script>
<%end%>

This will alert the first contact name from your database.

Arjan
23.8k12 gold badges65 silver badges71 bronze badges
answered Feb 3, 2011 at 9:57
Sign up to request clarification or add additional context in comments.

9 Comments

@Nikita: How am I suppose to select a particular element for the array. For eg.When I try to do this <%=Contact.order('contacts.position ASC')[i].first.name%> it shows error. A constant in the place of 'i' works fine. The error is undefined local variable i.
@dilip - OK, it gets a bit more advanced. <% somecode %> in view executes ruby code. <%= ruby variable %> (note = sign) inserts value of ruby variable to the html code in view. So one option for you can be constructing a loop and then inserting it to your view with <% %>
@nikita: I know how to add ruby variables to html code. But here i want to assign ruby variable to javascript variable. I tried doing this var first = "<%=Contact.order('contacts.position ASC')[i].first_name%>"; But it works only if i give a contant number in the place of i. Else it shows local variable undeclared.
Exactly. var first = is outside <% %> so it will be parsed as a part of html code, not as Ruby code. Use something like <% i = 5 %><%=Contact.order('contacts.position ASC')[i].first_name%> or even a loop, depending what you want.
<% @contacts = Contact.order("contacts.position ASC") %><%a = 10%><% for i in 0 do %>var firstname = <%=@contacts[i].first_name%><%end%>
|
1

You can do this by using the

to_json

method in Ruby

or

render :json => @contacts

answered Feb 3, 2011 at 9:00

1 Comment

After that how am I suppose to use it in javscript? I am totally new to rails.
0

Ruby is server side language. JavaScript is mostly (server side also - e.g. node.js) client side. If you want to pass values from Ruby to JS, you could render that value as part of view in script tags or retrieve them via AJAX.

answered Feb 3, 2011 at 8:51

1 Comment

@Tarscher gave you an example in his answer :) And I suggest reading about JSON: json.org

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.