4 ruby ruby-on-rails erb ruby-on-rails-4
我需要为 erb 模板以非常特定的格式呈现 Ruby 数组。这是因为我使用 JQcloud 使用 JQuery 构建词云,并且显然对数组格式很挑剔。
以下是 JQcloud 需要格式化 JS 数组的方式:
var word_array = [
{text: "Lorem", weight: 15},
{text: "Ipsum", weight: 9},
{text: "Dolor", weight: 6},
{text: "Sit", weight: 7},
{text: "Amet", weight: 5}
// ...as many words as you want
];
Run Code Online (Sandbox Code Playgroud)
所以我在我的控制器中创建了两个数组,一个用于构建云的单词数组,以及每个单词的另一个权重数组。
ruby_word_array = ["Lorem","Ipsum","Dolor","Sit","Amet"]
ruby_weight_array = [15,10,13,8,4]
Run Code Online (Sandbox Code Playgroud)
我需要以这样的方式转换我的两个 Ruby 数组,以便它们可以使用 erb 正确呈现。到目前为止,我想出了:
var wordArray = <%= raw @word_array.map{|a, i| {text: @word_array[0], weight: 15} } %> # I just hard coded the weight for simplicity
Run Code Online (Sandbox Code Playgroud)
这给了我一些接近但还不够接近的东西,它最终的格式如下:
var wordArray = [{:text=>"Lorem", :weight=>15}, {:text=>"Ipsum", :weight=>15}]
Run Code Online (Sandbox Code Playgroud)
我真的只需要知道如何修改我的最后一个示例以在 Python 样式哈希语法中呈现 {key: "value"},{key_2: "value_2"}
老实说,这是一个棘手的问题,我很难过。我为此使用的库称为 JQcloud,它有一个 Ruby gem,我已将其合并到此 Rails 应用程序中。这是一个链接。
你为什么不直接使用to_json?
# in ruby
@array = [{:text=>"Lorem", :weight=>15}, {:text=>"Ipsum", :weight=>15}]
Run Code Online (Sandbox Code Playgroud)
然后,在视图中:
var wordArray = <%= @array.to_json.html_safe %>;
Run Code Online (Sandbox Code Playgroud)
这将呈现:
var wordArray = [{"text":"Lorem","weight":15},{"text":"Ipsum","weight":15}];
Run Code Online (Sandbox Code Playgroud)