Спасибо за этот вопрос. Из этого вопроса я кое-что узнал.
Я внес в ваш ответ короткий список [примечание: используйте гем 'ROO']
def load_imported_members(member)
spreadsheet = open_spreadsheet(member)
spreadsheet.each do |records|
record = @spreadsheet ? Hash[[@header, @spreadsheet.row(records)].transpose] : Hash[records] # transpose for xlsx records and
attributes = {id: record['id'], name: record['name'], email: record['email'], age: record['age']}
member_object = Member.new(attributes)
if member_object.valid?
if Member.find(attributes[:id])
Member.find(attributes[:id]).update(attributes)
else
member_object.save
end
end
end
end
Вы можете проанализировать загруженный файл, используя Roo драгоценный камень.
def self.open_spreadsheet(member)
case File.extname(member.file.original_filename)
when ".csv" then
Roo::CSV.new(member.file.expiring_url, csv_options: {headers: true, skip_blanks: true, header_converters: ->(header) { header.strip }, converters: ->(data) { data ? data.strip : nil }})
when ".xlsx", ".xls" then
@spreadsheet = Roo::Spreadsheet.open(member.file.expiring_url)
@header = @spreadsheet.row(1)
(2..@spreadsheet.last_row)
end
end
Здесь я использовал загруженный URL-адрес s3, т.е. expiring_url. Надеюсь это будет полезно. Я не проверял. извините, за небольшие ошибки.
Если вы использовали проверки для имени, электронной почты и возраста. Это, безусловно, поможет вам ..