ActiveShipping и Grape (Rails) — неинициализированная константа API::V1::Shippings::ActiveShipping

Я использую Grape для создания API на рельсах. Теперь я хочу использовать Shopify гем Active Shipping, но когда я пытаюсь использовать его в моем custom_helper в Grape, я получаю сообщение об ошибке uninitialized constant ActiveShipping. Кроме того, я также получаю следующее сообщение:

Cannot render console with content type application/jsonAllowed content types: [#<Mime::Type:0x007f8bea21b4e8 @synonyms=["application/xhtml+xml"], @symbol=:html, @string="text/html">, #<Mime::Type:0x007f8bea21b038 @synonyms=[], @symbol=:text, @string="text/plain">, #<Mime::Type:0x007f8bec0fe950 @synonyms=[], @symbol=:url_encoded_form, @string="application/x-www-form-urlencoded">]

мой вспомогательный файл выглядит так:

require 'active_shipping'
module API
    module V1
        module Helpers
            module ShippingHelpers
                extend Grape::API::Helpers

                def ups_tracking_info(tracking_number)
                    ups = ActiveShipping::UPS.new(login, password, key) #this is where it throws an error
                    ups.find_tracking_info(tracking_number)
                end
            end
        end
    end
end

и я включаю его в свой файл доставки винограда, например:

module API
  module V1
    class Shippings < Grape::API
        helpers API::V1::Helpers::ShippingHelpers 
       ...
        #some endpoint:
          ups_tracking_info(tracking_info)
       ...
    end
  end
end

Почему я получаю сообщение об ошибке с неинициализированной константой? Мне требуется драгоценный камень в моем вспомогательном файле. Требование его в моем файле config/application.rb тоже не работает...

Надеюсь, у кого-то будет идея, которая может помочь мне в дальнейшем. Заранее спасибо!

Обратите внимание, что все мои файлы винограда находятся в папке app/api/api, так что это не проблема.


person PSR    schedule 28.04.2015    source источник
comment
Попробуйте ::ActiveShipping::UPS, чтобы он искал класс на корневом уровне, а не внутри API::V1::Shippings.   -  person Philip Hallstrom    schedule 28.04.2015
comment
Спасибо за ответ @Philip. К сожалению, это не помогло. Пожалуйста, смотрите мой ответ ниже. Оказалось, что документация была неправильной, и мне нужно было использовать include ActiveMerchant::Shipping в моем классе.   -  person PSR    schedule 28.04.2015


Ответы (1)


Оказалось, что документация с жемчугом на github неверна. Правильная информация написана здесь. Мне пришлось include ActiveMerchant::Shipping в своем классе отказаться от использования ActiveMerchant::Shipping в коде. Поэтому вместо этого используйте UPS.new() или FedEx.new() и т. д.

person PSR    schedule 28.04.2015
comment
Вы также, вероятно, могли бы не делать этого и просто сделать ::ActiveMerchant::Shipping::UPS.... - person Philip Hallstrom; 29.04.2015
comment
Думаю, спасибо за предложение! Тем не менее документация с драгоценным камнем была неправильной... - person PSR; 29.04.2015