Неинициализированная константа Admin::ModeratorsController::ModeratorInteractor

Привет, я работаю над проектом RoR с ruby-2.3.0 и rails 4. Я пытаюсь вызвать метод интерактора из контроллера. Мой контроллер находится внутри каталога Admin следующим образом:

class Admin::ModeratorsController < Admin::ApplicationController
  include Interactor

  def index
    ModeratorInteractor.find_abc(params)
  end
end

Мой интерактор:-

# frozen_string_literal: true

class ModeratorInteractor
  def self.find_abc(params)
    User.all
  end
end

Когда я запускаю свой код, я получаю сообщение об ошибке uninitialized constant Admin::ModeratorsController::ModeratorInteractor, Я также пытаюсь включить Interactor:-

include Interactor

Пожалуйста, помогите, как это исправить. Заранее спасибо.

2 ответа

Вам нужно определить ModeratorInteractor как module чтобы включить его в свой контроллер:

module ModeratorInteractor
  def self.find_abc(params)
    User.all
  end
end

Затем вам нужно убедиться, что модуль загружен правильно:

# in application.rb
config.autoload_paths += %W("#{config.root}/lib") # path to your module

Или вы также можете использовать require вместо autoload_paths:

require "#{Rails.root}/lib/modeator_interactor"

Затем в вашем контроллере вы можете включить его:

include ModeratorInteractor

Во-первых, вам нужноinclude Interactorв вашейModeratorInteractor, также необходимо определитьcallметод, неfind_abcкоторый не будет работать, и он выдаст ошибкуundefined method, так что ваш окончательный интерактор будет выглядеть так

      # frozen_string_literal: true

class ModeratorInteractor
  include Interactor

  def self.call
    params = context.params
  end
end

и вы будете называть это как

      ModeratorInteractor.call(params: params)

Вуаля.

Другие вопросы по тегам