У меня проблемы с инициализацией моей модели.
Я пытаюсь построить модель, которая принимает строку url_address при инициализации, использует DocRaptor для создания PDF, затем использует pdf-reader для чтения данных из этого PDFи, наконец, удалите сохраненный PDF.
Когда у меня пустая модель, я могу сохранить с помощью форм Rails 5, как описано во вводном руководстве по Rails 5, здесь: https://guides.rubyonrails.org/getting_started.html
Я построилновый проект с нуля, используя базу данных postgresql, и приступил к работе с Руководством.Я смог прекрасно сохранить модели с пустым определением UrlDataModel.Однако, когда я отредактировал свою модель, чтобы она содержала функциональные возможности, необходимые для извлечения и чтения PDF-файла, я получил
NoMethodError - undefined method '[]' for nil:Class
Я знаю, что эта ошибка означает, что моя модель пуста, поэтому я пытаюсь устранить неполадкикак это происходит.
Сбой контроллера
@url_data_model.save
Мой репозиторий здесь: https://github.com/blueMesaEngineering/Minotaur-hoof
Здесь следует модель:
class UrlDataModel < ApplicationRecord
attr_accessor :url_address, :pdf_version, :producer, :title, :metadata, :page_count
def initialize(attributes = {})
@url_address = attributes[:url_address]
@pdf_version = attributes[:pdf_version]
@producer = attributes[:producer]
@title = attributes[:title]
@metadata = attributes[:metadata]
@page_count = attributes[:page_count]
end
def after_initialize
buildModelFromURLViaPDF
end
def buildModelFromURLViaPDF
convertURLToPDF
readPDFData
deletePDF
end
def convertURLToPDF
require 'bundler/setup'
Bundler.require
DocRaptor.configure do |dr|
dr.username = 'YOUR_API_KEY_HERE' # this key works for test documents
# dr.debugging = true
end
$docraptor = DocRaptor::DocApi.new
begin
logPathName = './storage/Logs/standardOutput/output.txt'
errorLogPathName = './storage/Logs/Error/'
pathName = './storage/PDFs/'
# url = "http://docraptor.com/examples/invoice.html"
url = 'http://www.docraptor.com'
@url_address = url
fileNamePDF = 'docraptor-ruby.pdf'
create_response = $docraptor.create_async_doc(
test: true, # test documents are free but watermarked
document_url: url, # or use a url
name: fileNamePDF, # help you find a document later
document_type: 'pdf' # pdf or xls or xlsx
)
loop do
status_response = $docraptor.get_async_doc_status(create_response.status_id)
# puts "doc status: #{status_response.status}"
case status_response.status
when 'completed'
doc_response = $docraptor.get_async_doc(status_response.download_id)
File.open('./storage/PDFs/docraptor-ruby.pdf', 'wb') do |file|
file.write(doc_response)
end
# puts "Wrote PDF to " + pathName + fileNamePDF
break
when 'failed'
# puts "FAILED"
# puts status_response
break
else
sleep 1
end
end
rescue DocRaptor::ApiError => error
# puts "#{error.class}: #{error.message}"
# puts error.code # HTTP response code
# puts error.response_body # HTTP response body
# puts error.backtrace[0..3].join("\n")
end
end
def readPDFData
require 'rubygems'
require 'pdf/reader'
fileName = './storage/PDFs/docraptor-ruby.pdf'
PDF::Reader.open(fileName) do |reader|
@pdf_version = reader.pdf_version
# @producer = reader.producer
# @title = reader.title
@metadata = reader.metadata
@page_count = reader.page_count
end
end
def deletePDF
require 'fileutils'
FileUtils.rm_rf('./storage/PDFs/docraptor-ruby.pdf')
end
end
Пенни за твои мысли?Я здесь до конца вечера, поэтому я смогу ответить напрямую.Спасибо, что взглянули!
Приветствия.
Контроллер: https://pastebin.com/QVaHCMep
Трассировка стека: https://pastebin.com/uQbXgiaH