我有这门课,我正在使用主动存储
class MaterialsUpload < ApplicationRecord
has_one_attached :csv_file
end
这是附件
#<ActiveStorage::Attached::One:0x007ff1f0be9e90
@dependent=:purge_later,
@name="csv_file",
@record=
#<MaterialsUpload:0x007ff1f0c604f0
id: 3,
success: 0,
errors_list: [],
total: 0,
created_at: Mon, 12 Feb 2018 14:43:35 UTC +00:00,
updated_at: Mon, 12 Feb 2018 14:43:35 UTC +00:00>>
有没有一种方法可以读取数据,这样我就可以做这样的事情
string = materials_upload.csv_file.read
CSV.parse(csv_string, headers: true) do |row|
# do something
end
我认为这可能是另一种选择(当它位于磁盘本地时)。我使用了this答案
中的代码file_path = ActiveStorage::Blob.service.send(:path_for, materials_upload.csv_file.key)
CSV.foreach file_path, headers: true do
# ...
end
上传后,您可以使用 CSV::Table lib:
将 CSV 文件读入 HTML 表格def show
@csv_data = CSV.open('uploaded_file.csv', headers: true).read
end
查看示例:
<table cellspacing="5" cellpadding="5" border="0" >
<tr>
<% @csv_data.headers.each do |header| %>
<th><%= header %></th>
<% end %>
</tr>
<% @csv_data.each do |row| %>
<tr>
<% row.each do |value| %>
<td><%= value[1] %></td>
<% end %>
</tr>
<% end %>
</table>