Ruby on rails 添加引号的Rails控制器
我有一个Openstruct对象: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
[#,#]
在我看来,我需要以一种用于绘制图表的格式进行渲染,因此类似于[[“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]
这并不能满足我的需要,但解释原因非常有用。谢谢