繁体   English   中英

Rails包含模型故障中的模块

[英]Rails include module in model trouble

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

module Models
    module Scopes
        extend ActiveSupport::Concern
        ...
    end
end

我正在尝试将其包含在模型中:

class User < ActiveRecord::Base
  include Models::Scopes
end

并得到错误:

NameError:未初始化的常量User :: Models

如何解决这个麻烦? 将此类文件保存在/ lib中也许是错误的?

环境:Rails v3.1 Ruby v1.9.3

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

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

重新启动服务器以获取新设置。

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

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

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

当您定义类时,您是在“打开”一个新的作用域。 因此,当您执行Models::Scopes ,ruby正在寻找User::Models::Scopes 您可以通过使用修复此::Models::Scopes ,该::告诉红宝石在全球范围内寻找。

仅供参考:我不确定我使用的术语,甚至不确定我的思路是否正确; 但无论如何,解决方案应该很好。 我认为Ruby在找不到User::Models::Scope ::Models::Scope后会尝试User::Models::Scope ,但事实并非如此。也许某个地方定义了User::Models范围? 无论如何,如您所见,我还不熟悉这些内容。 如果您感兴趣,您可能想研究这个主题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM