为什么我的记录器信息不能在服务类上使用,而在控制器中却可以?

时间:2018-10-11 13:47:11

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-5

我正在尝试调试我的应用程序。

在我的控制器上,一切看起来都很好。

class AccountsController < ApplicationController
  rescue_from PaymentGateway::CreateSubscriptionServiceError do |e|
    redirect_to root_path, alert: e.message
  end
 def change_plan
    logger.info('Changing the Plan')

但是当我尝试在我的services文件夹中执行相同的操作时:

class PaymentGateway::CreateSubscriptionService < PaymentGateway::Service
  ERROR_MESSAGE = "There was an error while creating the subscription"
  attr_accessor :user, :plan, :token, :subscription, :success

def run
 logger.info('Starting the PaymentGateway::CreateSubscriptionService.run')
    begin
      Subscription.transaction do
        create_client_subscription
        self.subscription = create_subscription
        self.success = true
      end
    rescue PaymentGateway::CreateCustomerService, 
      PaymentGateway::CreatePlanService,
      PaymentGateway::ClientError => e
      raise PaymentGateway::CreateSubscriptionServiceError,e.message

    end
  end

我收到一个错误:

undefined local variable or method `logger' for #<PaymentGateway::CreateSubscriptionService:0x007f2f4eaff788>

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

因为在所有控制器上都有一种称为logger的方法。

def logger
  ActionController::Base.logger
end

您可以将一个添加到您的班级中,也可以使用Rails.logger代替logger

def logger
  Rails.logger
end

答案 1 :(得分:0)

好像记录器没有在您的服务文件夹中初始化。

我认为,如果在服务文件夹中初始化记录器,则它应该可以工作。

尝试以下操作:logger = Logger.new(STDOUT)