繁体   English   中英

Rails控制器添加引号

[英]Rails controller adding quotation marks

我有一个Openstruct对象:

[#<OpenStruct date="20150602", pageviews="46">, #<OpenStruct date="20150603", pageviews="44">]

我认为,我需要呈现一种用于图表绘制的格式,因此类似[["20150602", 46], ["20150603", 44]]

我认为,可以通过以下方式实现此目的:

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

而且效果很好。 但是我想要在控制器中使用它,因此我不需要视图中的所有代码,而只需将其插入数据中即可。

因此,我在控制器中尝试以下行:

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

但是,当我在视图中打印@visits_mapped时,现在已经添加了一堆新的引号,没有明显的原因:

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

为什么这样在视图和控制器之间改变行为? 如果这是一个愚蠢的问题,请原谅我。

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

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

    -@visits.each do |v|
      ="[#{v.date}, #{v.pageviews}],"

或在控制器中:

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

我有95%的肯定您只是在进行JSON的回旋尝试。 要生成JSON,您应该始终使用to_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]]

上面的评论建议您希望输出位于data-visits属性中,您可以在Haml中方便地执行以下操作:

#chart_div{ data: { visits: @visits_mapped.to_json } }

该模板将评估为以下HTML:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM