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
var array = <%= escape_javascript @publisher_list.to_json %>
1 Comment
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
console.log(array) it displays nothing, the array is null.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_javascriptsimply 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.