问题
I have this class and I am using active storage
class MaterialsUpload < ApplicationRecord
has_one_attached :csv_file
end
This is the attachment
#<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>>
Is there a way I can read the data so I can do something like this
string = materials_upload.csv_file.read
CSV.parse(csv_string, headers: true) do |row|
# do something
end
回答1:
Use download to obtain the file’s contents:
CSV.parse(materials_upload.csv_file.download, headers: true) do |row|
# ...
end
回答2:
I think this could be another option (when it's local on disk). I used code from this answer
file_path = ActiveStorage::Blob.service.send(:path_for, materials_upload.csv_file.key)
CSV.foreach file_path, headers: true do
# ...
end
回答3:
After uploading you can read CSV file into an HTML table with CSV::Table lib:
def show
@csv_data = CSV.open('uploaded_file.csv', headers: true).read
end
Example for view:
<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>
来源:https://stackoverflow.com/questions/48749767/rails-read-csv-file-data-with-active-storage