需要注意的关键是模块Mybar不存在于具有类似名称的文件中.它位于my_foo.rb中.
my_foo.rb
module Mybar def self.test "This is a test string" endend
some_class.rb
require 'my_foo'class SomeClass include Mybar def initialize puts Mybar.test endend
当我运行它时,我得到一个nameError
nameError - uninitialized constant Mybar
看起来Rails试图变得聪明并且假设因为模块名称是Mybar,它应该位于类似名为my_bar.rb的文件中.
我尝试通过将名称更改为预期来测试此理论,并且它突然正常工作
my_foo.rb (renamed)-> my_bar.rb
问题是
>为什么Rails会这样做?似乎它假设太多了.我知道它是“约定优于配置”,但有几个正当理由让文件名与模块名称不匹配.
>如何覆盖此行为?
当您尝试使用与文件名匹配且位于/ lib /目录下的新类/模块名称时,Rails仅自动加载.
要解决您的问题,您可以将my_foo.rb文件放在/ lib /目录下,并且需要这样:require’lib / my_foo’
有关如何在Rails中自动加载的更多信息,请参阅Rails文档中的Autoloading and Reloading Constants.
总结以上是内存溢出为你收集整理的ruby-on-rails – 当我“包含”模块时,为什么Rails会尝试猜测文件名?全部内容,希望文章能够帮你解决ruby-on-rails – 当我“包含”模块时,为什么Rails会尝试猜测文件名?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)