ruby-on-rails – 当我“包含”模块时,为什么Rails会尝试猜测文件名?

ruby-on-rails – 当我“包含”模块时,为什么Rails会尝试猜测文件名?,第1张

概述我有以下设置,其中一个类包含一个位于另一个文件中的模块 需要注意的关键是模块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 我有以下设置,其中一个类包含一个位于另一个文件中的模块

需要注意的关键是模块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会这样做?似乎它假设太多了.我知道它是“约定优于配置”,但有几个正当理由让文件名与模块名称不匹配.
>如何覆盖此行为?

解决方法 这与自动加载在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会尝试猜测文件名?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1276665.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存