включить в Rails Controller - PullRequest
0 голосов
/ 18 марта 2020

Я пытался Ruby на интеграции Rails с Авторизацией. Net API от https://github.com/AuthorizeNet/sample-code-ruby/blob/master/AcceptSuite/create-an-accept-payment-transaction.rb. Когда я пытаюсь запустить этот ruby код в методе пользовательского контроллера

   class PaymentController < ApplicationController

     def create_an_accept_payment_transaction
         include AuthorizeNet::API
         config = YAML.load_file(File.dirname(__FILE__) + "/../credentials.yml")

         transaction = Transaction.new(config['api_login_id'], config['api_transaction_key'], :gateway => :sandbox)

         request = CreateTransactionRequest.new

        ...............
        if response.messages.resultCode == MessageTypeEnum::Ok
        ................
     end
   end

, я получаю следующие ошибки

NoMethodError (undefined method `include' for #<PaymentController:0x000000000296d118>)

и

 NameError (uninitialized constant PaymentController::MessageTypeEnum
 Did you mean?  MessagePack):

Но тот же код ruby работает без каких-либо проблем в методе модели ActiveRecord. ПОЧЕМУ?

class Payment < ApplicationRecord

def self.payment_transaction(token, amount)
      require 'yaml'
      require 'authorizenet' 
      require 'securerandom'
      include AuthorizeNet::API
      config = YAML.load_file(File.dirname(__FILE__) + "/../credentials.yml")
      transaction = Transaction.new(config['api_login_id'], config['api_transaction_key'], :gateway => :sandbox)
     request = CreateTransactionRequest.new
      request.transactionRequest = TransactionRequestType.new()
    ..................
 end
 end    

Я мог бы также без проблем запустить этот код ruby с

    $ ruby create-an-accept-payment-transaction.rb

1 Ответ

2 голосов
/ 18 марта 2020

payment_transaction является методом класса, тогда как create_an_accept_payment_transaction является методом экземпляра. Вызов include AuthorizeNet::API работает в классе, а не в экземпляре.

Попробуйте вместо этого:

require 'authorizenet' 
class PaymentController < ApplicationController  
  include AuthorizeNet::API
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...