Приведенный ниже код проверяет и вызывает ошибку времени выполнения для неизвестных форматов файлов.
def open_spreadsheet
case File.extname(file.original_filename)
when ".csv" then CSV.new(file.path)
when ".xls" then Roo::Excel.new(file.path, nil, :ignore)
when ".xlsx" then Roo::Excelx.new(file.path)
else
raise "Unknown file type: #{file.original_filename}"
end
end
Я хочу показать сообщение об ошибке, а не ошибку времени выполнения.
attr_accessor :file
Как я могу проверить поле заголовка загруженной электронной таблицы и показать сообщение об ошибке, если есть какие-либо изменения в заголовке из стандартного формата?
Я использовал атрибуты accept, чтобы принимать xls и xlsx.
Как проверить значение заголовков
попробуйте что-нибудь вроде этого:
def open_spreadsheet
case File.extname self.file.original_filename
when ".xls"
Roo::Excel.new self.file.path
when ".xlsx"
Roo::Excelx.new self.file.path
else
self.errors[:file] << I18n.t("errors.messages.invalid_file_format", extension: File.extname(file.original_filename))
return nil
end
end
Вы можете жестко закодировать сообщение там, но хорошо, если бы оно было в правильном теге I18n.
Он не показывает сообщение об ошибке и не проверяет расширения.
Как проверить заголовки листа?
Вы хотите проверить расширение файла, когда пользователь загружает файл. Реализация немного зависит от вашего контроллера, модели и библиотеки, которые вы используете для загрузки. Например, Несущая волна позволяет определить
extension_whitelist
. Если расширение не соответствует списку, проверка завершится неудачно, и пользователь должен увидеть ошибку.