неопределенная ошибка функции из модуля внутри класса в рельсах - PullRequest
2 голосов
/ 24 октября 2019

У меня есть module Helper, который присутствует in app/models/concerns/helper.rb

module Helper
  def func
    return ['A', 'B', 'C']
  end
end

У меня есть класс NewService, который присутствует в app/services/pqr/new_service.rb

module PQR
  class NewService < ApplicationService
    include Helper
    @@results = func

    def self.another_func
      if @@results.blank?
        @@results = func
      end
    end
  end
end

При вызовефункция: PQR::NewService.another_func
Я получаю сообщение об ошибке: (undefined local variable or method func for PQR::NewService:Class)

Ruby version - 2.5.3
Rails version - 5.2.3

Ответы [ 2 ]

4 голосов
/ 24 октября 2019

Вы звоните func изнутри области видимости;почему вы ожидаете, что оттуда будут доступны методы на уровне экземпляра? Это MCVE для вашего кода

class Foo
  def func; end # instance method
  func          # class scope
end

Чтобы сделать func доступным, нужно сделать его доступным на уровне класса. Это означает, что вы должны включить ваше беспокойство в singleton_class из PQR.

Придуманный пример:

module Foo
  def func; puts "YO"; end
end

class Bar
  class << self
    include Foo
  end

  func
end
3 голосов
/ 24 октября 2019

Вы включаете Помощника, а не расширяете его.

например, вы вызываете func в определении класса, но добавили его как метод экземпляра

По существу, выполните

extend Helper
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...