Sinatra 显示 CSV 条目

Sinatra Display CSV entries

如何将 csv 文件中的数据显示到 Sinatra 应用程序中?

Sinatra:

csv = CSV.read(data.csv)
csv.each do |entry|
 @output = "#{entry[1]},#{entry[4]}:#{entry[0]}"
end

Erb:

<%= @data %>

只显示 csv 文件的最后一行。

问题

使用此代码:

csv = CSV.read(data.csv)
csv.each do |entry|
 @output = "#{entry[1]},#{entry[4]}:#{entry[0]}"
end

您遍历所有 csv 行。

对于每一行,块定义 @output 变量。

在第一个 csv 行之后,代码继续覆盖 @output_variable

可能的解决方案

你需要map, not each.

csv = CSV.read(data.csv)
@data = csv.map do |entry|
  "#{entry[1]},#{entry[4]}:#{entry[0]}"
end

然后您可以使用

<%= @data %>

在您看来。 @data 现在是一个字符串数组,每个 csv 行一个字符串。

您可能想将 for 循环移动到模板文件。

在西纳特拉

@csv_data = CSV.read(data.csv)

在 erb

<% @csv_data.each do |entry| %>
  <%= entry[1] %>,<%= entry[4] %>:<%= entry[0] %>
<% end %>