Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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 Rails包括模型故障中的模块_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 3.1 - Fatal编程技术网

Ruby on rails Rails包括模型故障中的模块

Ruby on rails Rails包括模型故障中的模块,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,我在/lib/models/scopes.rb中有模块 module Models module Scopes extend ActiveSupport::Concern ... end end 我试图从模型中包含它: class User < ActiveRecord::Base include Models::Scopes end class用户

我在/lib/models/scopes.rb中有模块

module Models
    module Scopes
        extend ActiveSupport::Concern
        ...
    end
end
我试图从模型中包含它:

class User < ActiveRecord::Base
  include Models::Scopes
end
class用户
和获取错误:

NameError:未初始化的常量用户::模型

如何解决这个问题?也许将这种类型的文件保存在/lib中是错误的

环境: Rails v3.1
Ruby v1.9.3

定义类时,您正在“打开”一个新范围。因此,当您执行
Models::Scopes
时,ruby正在寻找
User::Models::Scopes
。您可以通过使用
::Models::Scopes
来解决这个问题,
告诉ruby查看全局范围


仅供参考:我不确定我使用的术语,甚至不确定我的思路是否正确;但无论如何,解决方案应该是好的。我认为Ruby在找不到
用户::模型::范围
后会尝试使用
::模型::范围
,但它没有。。也许在某个地方定义了一个
User::Models
范围?不管怎样,正如你所看到的,我还不熟悉这些。如果你感兴趣的话,你可能想深入研究这个主题。当你定义你的类时,你正在“打开”一个新的范围。因此,当您执行
Models::Scopes
时,ruby正在寻找
User::Models::Scopes
。您可以通过使用
::Models::Scopes
来解决这个问题,
告诉ruby查看全局范围


仅供参考:我不确定我使用的术语,甚至不确定我的思路是否正确;但无论如何,解决方案应该是好的。我认为Ruby在找不到
用户::模型::范围
后会尝试使用
::模型::范围
,但它没有。。也许在某个地方定义了一个
User::Models
范围?不管怎样,正如你所看到的,我还不熟悉这些。如果您感兴趣,您可能想深入研究这个主题,Rails不需要自动在
lib
目录中创建文件,但您可以添加到
config/application.rb
中的自动加载路径:

config.autoload_paths += %W(#{config.root}/lib)
重新启动服务器以获取新设置

现在,当第一次使用模块名时,将自动加载文件。在开发模式下,您可能希望在每次更改后重新加载模块,以便在不重新启动服务器的情况下查看更改。要执行此操作,请将其添加为一个急切加载路径:

config.eager_load_paths += %W(#{config.root}/lib)

只要在
User
或其他任何地方没有
Models
类或模块,范围就不会有问题。

Rails不需要自动在
lib
目录中添加文件,但您可以添加到
config/application.rb
中的自动加载路径:

config.autoload_paths += %W(#{config.root}/lib)
重新启动服务器以获取新设置

现在,当第一次使用模块名时,将自动加载文件。在开发模式下,您可能希望在每次更改后重新加载模块,以便在不重新启动服务器的情况下查看更改。要执行此操作,请将其添加为一个急切加载路径:

config.eager_load_paths += %W(#{config.root}/lib)

只要您在
User
或其他任何地方没有
Models
类或模块,范围就不应该是问题。

谢谢您的回答。但是现在,使用::Models:Scopes,Rails抛出“NameError:uninitialized constant Models”,那么您应该参考@SMWEB answer。我跳过了您所在的
/lib
部分。若你们的文件已经加载,你们的第一个代码应该可以正常工作。谢谢你们的回答。但是现在,使用::Models:Scopes,Rails抛出“NameError:uninitialized constant Models”,那么您应该参考@SMWEB answer。我跳过了您所在的
/lib
部分。如果加载了文件,第一个代码应该可以正常工作。