Инициализация модели - Передача параметров - Rails 5 - PullRequest
0 голосов
/ 08 марта 2019

У меня проблемы с инициализацией моей модели.

Я пытаюсь построить модель, которая принимает строку 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...