#ruby_on_rails #ruby
В папке лежит много разных xml, которые необходимо добавить в базу данных. Механизм получения данных из xml есть, но работает, если я загружаю файлы через сайт. То есть при добавлении файла в базу данных происходит сравнение названия файла в базе и в папке. Хочу автоматизировать данный процесс через cron. Не могу понять как мне получить список имен файлов и добавить их в базу данных. Вот контроллер, который загружает файлы через сайт: folder="public/mse/upload/all" FileUtils.mkdir_p("#{Rails.root}/#{folder}") unless File.directory?("#{Rails.root}/#{folder}") params[:xml_attachments].each do |uploaded| filename = uploaded.original_filename unless MseXml.where(xml_id: filename).present? File.open(Rails.root.join(folder, uploaded.original_filename),'wb') do |file| file.write(uploaded.read) end MseXml.create(xml_id: filename) Из формы берется params[:xml_attachments]: =form_tag load_files_xml_path, method: 'post', multipart: true, class: "form-horizontal" do %h3 Выбрать файлы =file_field_tag :file, :multiple => true, name: "xml_attachments[]" %br =submit_tag 'Загрузить файлы', class: "btn btn-primary" mse_xmls имеет поле xml_id, которое содержит имя файла. Пример: 000CD110-41B6-407F-A9EF-6A35A5D5D2A7.xml Как реализовать получение всех имен файлов и добавление этих имен в MseXml? Наглядно это выгляди так: names=список имен файла.each do |f|(работа с 1 файлом) unless MseXml.where(xml_id: f).present? MseXml.create(xml_id: f) puts 'файл сохранен' end Я не могу разбить список файлов по 1 файлу, у меня в базу либо записывается весь массив либо не записывается ничего
Ответы
Ответ 1
Как пример, этот код напечатает все имена файлов с расширением xml в папке /tmp Dir.chdir("/tmp") do Dir.glob("*.xml").each do |file_name| puts file_name end endОтвет 2
Не могу понять как мне получить список имен файлов Вы можете выполнить shell команды и получить список файлов из директории по ответу. Например: names = `ls path/to/xml_files | grep xml`.split("\n") Получив имена файлов Вы уже можете работать с ними.
Комментариев нет:
Отправить комментарий