Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 添加引号的Rails控制器_Ruby On Rails - Fatal编程技术网

Ruby on rails 添加引号的Rails控制器

Ruby on rails 添加引号的Rails控制器,ruby-on-rails,Ruby On Rails,我有一个Openstruct对象: [#,#] 在我看来,我需要以一种用于绘制图表的格式进行渲染,因此类似于[[“20150602”,46],“20150603”,44] 在我看来,我可以通过以下方式实现这一点: -@visits.map do |v| ="[#{v.date}, #{v.pageviews}]," 而且效果很好。但是我希望它在控制器中,所以我不需要视图中的所有代码,我可以将它插入到数据中 因此,我在控制器中尝试这一行: @visits_mapped = @visits.m

我有一个Openstruct对象:

[#,#]

在我看来,我需要以一种用于绘制图表的格式进行渲染,因此类似于
[[“20150602”,46],“20150603”,44]

在我看来,我可以通过以下方式实现这一点:

-@visits.map do |v|
  ="[#{v.date}, #{v.pageviews}],"
而且效果很好。但是我希望它在控制器中,所以我不需要视图中的所有代码,我可以将它插入到数据中

因此,我在控制器中尝试这一行:

@visits_mapped = @visits.map {|v| "[#{v.date}, #{v.pageviews}],"}
    @visits_mapped = @visits.map{ |v| [ v.date, v.pageviews ] }
但是,现在,当我在视图中打印
@visions\u mapped
时,添加了一组全新的引号,原因不明:

["[20150602, 46],", "[20150603, 44],"]

为什么视图和控制器之间的行为会发生这样的变化?如果这是一个愚蠢的问题,请原谅……

行为没有改变。在视图中,您只是看不到地图的输出。Map迭代数组的成员,并生成一个包含迭代结果的新数组

在视图中,您得到了您“期望”的结果,因为您放弃了map的最终结果,而是显示了每个迭代的结果。由于它们之间没有任何内容,因此视图中的输出看起来是正确的(但是应该缺少外部数组[],并且在最后一个元素之后应该有一个额外的数组)。如果将贴图更改为each,则可以在视图中获得相同的结果(这应该更有效,因为它不会生成结果数组)。因此,我们认为:

    -@visits.each do |v|
      ="[#{v.date}, #{v.pageviews}],"
或在控制器中:

@visits_mapped = @visits.map {|v| "[#{v.date}, #{v.pageviews}],"}
    @visits_mapped = @visits.map{ |v| [ v.date, v.pageviews ] }

我95%确定您只是在做一个真正迂回的尝试来生成JSON。要生成JSON,您应该始终使用
来生成JSON

visits = [ OpenStruct.new(date: "20150602", pageviews: "46"),
           OpenStruct.new(date: "20150603", pageviews: "44") ]

# Convert the array of OpenStructs to an array of two-element arrays,
# converting `pageviews` to an integer while we're at it
@visits_mapped = visits.map {|visit| [ visit.date, visit.pageviews.to_i ] }

puts @visits_mapped.to_json
# => [["20150602",46],["20150603",44]]
上面的注释表明您希望输出位于
数据访问
属性中,您可以方便地在Haml中这样做:

#chart_div{data:{visions:@visions_mapped.to_json}
该模板将计算为以下HTML:

<div data-visits='[["20150602",46],["20150603",44]]' id='chart_div'></div>


您想要的HTML输出是什么样子的?您是否尝试过这个
@visions\u mapped=@visions.collect{v |[v.date,v.pageviews]}
我感觉您真正想做的是输出JSON,而不是手动将值用引号括起来,但是,如果不知道你想通过浏览器接收什么,就很难帮助你到达那里。@jordan,它需要看起来像:[“20150602”,46],“20150603”,44]。请试试这个
@visions\u mapped=@visions.collect{v.date,v.pageviews.to\u i]
这并不能满足我的需要,但解释原因非常有用。谢谢