Rails包含模型故障中的模块

Mar*_*sov 1 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

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

module Models
    module Scopes
        extend ActiveSupport::Concern
        ...
    end
end
Run Code Online (Sandbox Code Playgroud)

我试图从模型中包含它:

class User < ActiveRecord::Base
  include Models::Scopes
end
Run Code Online (Sandbox Code Playgroud)

并得到错误:

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

如何解决这个麻烦?将这类文件保存在/ lib中可能是错误的吗?

环境:Rails v3.1 Ruby v1.9.3

Mát*_*osi 8

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

config.autoload_paths += %W(#{config.root}/lib)
Run Code Online (Sandbox Code Playgroud)

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

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

config.eager_load_paths += %W(#{config.root}/lib)
Run Code Online (Sandbox Code Playgroud)

该范围不应该是一个问题,只要你没有一个Models类或模块 User或其他地方.