7

I am trying to pass a ruby array to a js view (js.erb format) but it doesn't work at all.

var array = "<%= @publishers_list %>";

The variable array is just set as a string with all the array's values in it.

Is there a way to keep the array format ?

Edit

I just realized it was because of my array format.

[{:label => "name1", :value => value1}, {:label => "name2", :value => value2}]

I tried to pass a simple array like:

[1,2,3]

and it worked fine.

The question is now: how can I pass this kind of array ? I really need to keep these hashes in it because I want to put it as a source of a jQuery autocomplete.

3 Answers 3

12
var array = <%= escape_javascript @publisher_list.to_json %>
Sign up to request clarification or add additional context in comments.

1 Comment

Ok I tried with "raw" instead of escape_javascript and it worked. Thanks !
2

Try this:

var array = <%= j @publishers_list.to_json %>

j is shorthand for escape_javascript (thanks to commenter lfx_cool).

See the documentation: http://api.rubyonrails.org/classes/ERB/Util.html

To clean up your view code a little, you can also turn the @publishers_list into json in your controller. That way, in your view you can just use:

var array = <%= j @publishers_list %>

3 Comments

Still doesn't work.. when I write console.log(array) it displays nothing, the array is null.
From your controller do logger.debug(@publishers_list) and check your development.log to see what the output is.
j is not shorthand for json_escape, j is shorthand for escape_javascript
0

simply define a array in Controller's specific action like:

def rails_action
  @publishers_list = []
  # write some code to insert value inside this array
  # like: 
  # @publishers.each do |publisher|
  # @publishers_list << publisher.name
  # end 
end

js file which is associated with this action, like: rails_action.js.erb

now use your code

var array = [];
array = "<%= @publishers_list %>";

Thanks.

2 Comments

The commented code in the controller could be changed to @publishers_list = @publishers.map &:name
yes, @GuilhermeBerger you are right.:). It's worse to use loop.

Your Answer

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.