Ruby on rails 获得;无法自动加载常量"'&引用;需要app/lib/subfolder/module.rb来定义它;
我正在尝试加载模块:Ruby on rails 获得;无法自动加载常量"'&引用;需要app/lib/subfolder/module.rb来定义它;,ruby-on-rails,ruby,module,Ruby On Rails,Ruby,Module,我正在尝试加载模块: #MainApp/app/lib/game/pieces.rb module Pieces class Pawn def initialize puts "I'm a piece!" end end end 在模型中: # MainApp/app/models/boardgame.rb class Boardgame < ApplicationRecord include G
#MainApp/app/lib/game/pieces.rb
module Pieces
class Pawn
def initialize
puts "I'm a piece!"
end
end
end
在模型中:
# MainApp/app/models/boardgame.rb
class Boardgame < ApplicationRecord
include Game::Pieces
end
#MainApp/app/models/boardgame.rb
类Boardgame
但我得到“无法自动加载常量Game::Pieces,需要/home/.MainApp/app/lib/Game/Pieces.rb来定义它(LoadError)”
我尝试在自动加载路径和快速加载路径中设置文件夹:
# config/application.rb
module MainApp
class Application < Rails::Application
config.load_defaults 5.2
config.autoload_paths << Rails.root.join('app/lib/game')
config.eager_load_paths << Rails.root.join('app/lib/game')
end
end
#config/application.rb
模块MainApp
类应用程序 config.autoload_路径您已经在模块棋子中定义了一个类棋子,但您希望在模块游戏中定义一个类棋子。您需要将MainApp/app/lib/game/pieces.rb中的代码更改为
module Game
class Piece
def initialize
puts "I'm a piece!"
end
end
end
当您包含Game::Pieces
时,您的模块应该如下所示:
module Game
module Pieces
# some code here
end
end
除此之外,在Ruby和Rails中构建结构的首选方法是根据模块名命名目录,因此您的模块路径应该是lib/game/pieces.rb
。
请考虑包含一个模块,而不是一个类< /p>您定义<代码>片段::< <代码> > MIApp/APP/LIB/游戏/块。RB < /代码>,但试图包含<代码>游戏::作品< /代码>。这没有道理,是吗?你错过了命名约定……我现在意识到了这一点:谢谢