Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获得;无法自动加载常量"'&引用;需要app/lib/subfolder/module.rb来定义它;_Ruby On Rails_Ruby_Module - Fatal编程技术网

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 < /代码>,但试图包含<代码>游戏::作品< /代码>。这没有道理,是吗?你错过了命名约定……我现在意识到了这一点:谢谢