簡體   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