У меня есть класс внутри app/models/user.rb
:неопределенный метод `привет» для Gamification :: Пользователь: Модуль
class User
include Gamification::User
def self.hello
puts "hello"
end
end
У меня есть модуль внутри lib/gamification/user.rb
:
module Gamification
module User
extend ActiveSupport::Concern
module ClassMethods
end
end
end
У меня есть другая модель AP/модели /conversation.rb
class Conversation
def hello
User.hello
end
end
config/application.rb
:
config.autoload_paths += Dir["#{config.root}/app/models/**/"]
config.autoload_paths += Dir["#{config.root}/lib/**/"]
config.autoload_paths += Dir["#{config.root}/app/models/tracker_related/**/"]
config.autoload_paths += Dir["#{config.root}/app/helpers/**/"]
config.autoload_paths += Dir["#{config.root}/app/models/concerns/**/"]
Когда я ударил Conversation.new.hello
, то я ожидаю, что это должно напечатать "hello"
. Но он возвращает:
undefined method `hello' for Gamification::User:Module.
Что я здесь делаю неправильно?
Это, по-видимому, конфликт имен - при вызове 'User.new' внутри вашего класса пользователя ruby принимает модуль' User' вместо класса 'User'. Попробуйте ':: User.hello' – BroiSatse
Мы вызываем этот метод из нескольких мест. Я не могу изменить это на все места. Недавно я добавил модуль пользователя. –
Любой другой способ вместо добавления :: к каждому вызову? –