Ruby on rails Rails包括模型故障中的模块
我在/lib/models/scopes.rb中有模块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用户
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
部分。如果加载了文件,第一个代码应该可以正常工作。