Ruby数组转换为JavaScript - Rails

7
我试图将一个 Ruby 数组传递给一个 js 视图(js.erb 格式),但根本不起作用。
变量 array 只是设置为一个字符串,其中包含所有数组的值。
有没有办法保持数组的格式?
编辑
我刚刚意识到这是因为我的数组格式问题。
我尝试传递一个简单的数组:
[1,2,3]
并且它可以正常工作。
现在的问题是:我该如何传递这种类型的数组?我真的需要保留其中的哈希,因为我想将其作为 jQuery 自动完成的来源。
3个回答

12
var array = <%= escape_javascript @publisher_list.to_json %>

14
好的,我尝试使用“原始文本”而不是escape_javascript,它起作用了。谢谢! - Mencls

2

试试这个:

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

jescape_javascript的简写(感谢评论者lfx_cool)。

参见文档:http://api.rubyonrails.org/classes/ERB/Util.html

为了使您的视图代码更加整洁,您还可以在控制器中将@publishers_list转换为json。这样,在您的视图中,您只需要使用:

var array = <%= j @publishers_list %>

仍然不起作用... 当我写 console.log(array) 时,它没有显示任何内容,数组为空。 - Mencls
从您的控制器执行 logger.debug(@publishers_list) 并检查您的 development.log 文件以查看输出内容。 - Christian-G
j is not shorthand for json_escape, j is shorthand for escape_javascript - lfx_cool

0

在控制器的特定操作中简单定义一个数组,例如:

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文件,例如:rails_action.js.erb

现在使用您的代码

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

谢谢。


控制器中的注释代码可以更改为 @publishers_list = @publishers.map &:name - gberger
是的,@GuilhermeBerger,你是对的。:)使用循环更糟糕。 - rony36

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接