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.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.