Rails - Невозможно автоматически загрузить константу - вызов API Transaction Express - PullRequest
0 голосов
/ 08 мая 2018

Я новичок в написании кода для поддержки сторонних (Transaction Express) вызовов API для приложения, которое я разрабатываю. Я следовал этому уроку здесь: https://revs.runtime -revolution.com / integrating-a-Third-Party-Api-with-rails-5-134f960ddbba , и это имеет смысл для меня. Однако я получаю следующую ошибку при попытке просмотра подписчиков на основе учебного кода.

Получено сообщение об ошибке:

Невозможно загрузить постоянную базу, ожидается /Users/xxxxxxxxx/Documents/projects/phrayme/xxxxxxxxxxx/app/services/base.rb определить это

Исходя из моих исследований, я думаю, что это может быть связано со структурой каталогов и с тем, что ожидает Rails, но я не смог точно определить проблему. Пожалуйста, сообщите.

subscribers_controller.rb

class SubscribersController < ApplicationController
   def index
     @subscribers, @errors = Transexp::Subscriber.random(query)
   end

   def show
     @subscriber = Transexp::Subscriber.find(params[:id])
   end

private

   def query
     params.fetch(:query, {})
   end
end

услуги / base.rb

module Transexp
  class Base
    attr_accessor :errors

    def initialize(args = {})
      args.each do |name, value|
        attr_name = name.to_s.underscore
        send("#{attr_name}=", value) if respond_to?("#{attr_name}=")
      end
    end
  end
end

услуги / subscriber.rb

module Transexp
  class Subscriber < Base
    attr_accessor :firstName,
                  :lastName,
                  :fullName,
                  :coName,
                  :phone_type,
                  :phone_nr,
                  :addrLn1,
                  :addrLn2,
                  :city,
                  :state,
                  :zipCode,
                  :ctry,
                  :email,
                  :type,
                  :stat,
                  :note

    MAX_LIMIT = 25

    def self.find(id)
      response = Request.get("subscribers/#{id}/information")
      Subscriber.new(response)
    end

    def self.random(query = {})
      response = Request.where('subscribers/random', query.merge({ number: MAX_LIMIT }))
      subscribers = response.fetch('subscribers', []).map { |subscriber| Subscriber.new(subscriber) }
      [ subscribers, response[:errors] ]
    end

    def initialize(args = {})
      super(args)
    end
  end
end

просмотр / подписчики / index.html.erb

<h1>Subscribers#index</h1>
<p>Find me in app/views/subscribers/index.html.erb</p>

<%= @subscribers %>

Библиотека / transexp / request.rb

class Request
  class << self
    def where(resource_path, query = {}, options = {})
      response, status = get_json(resource_path, query)
      status == 200 ? response : errors(response)
    end

    def get(id)
      response, status = get_json(id)
      status == 200 ? response : errors(response)
    end

    def errors(response)
      error = { errors: { status: response["status"], message: response["message"] } }
      response.merge(error)
    end

    def get_json(root_path, query = {})
      query_string = query.map{|k,v| "#{k}=#{v}"}.join("&")
      path = query.empty?? root_path : "#{root_path}?#{query_string}"
      response = api.get(path)
      [JSON.parse(response.body), response.status]
    end

    def api
      Connection.api
    end
  end
end

Библиотека / transexp / connection.rb

require 'faraday'
require 'json'

module Transexp
  class Connection
    BASE = 'https://xxxxxxxxxxx'

    def self.api
      Faraday.new(url: BASE) do |faraday|
        faraday.response :logger
        faraday.adapter Faraday.default_adapter
        faraday.headers['Content-Type'] = 'application/json'
        faraday.headers['Gateway_ID'] = ENV['XXXXX']
        faraday.headers['HostedKey'] = ENV['XXXXX']
        faraday.headers['RURL'] = 'https://XXXXX.com/'
        faraday.headers['CURL'] = 'https://XXXXX.com/'

      end
    end
  end

конец

Спасибо за любые советы или советы, которые вы можете дать.

DS

...