模块:Mongoid::Loadable

包含在:
Mongoid
定义于:
lib/mongoid/loadable.rb

Overview

定义 Mongoid 如何自动加载所有定义的模型。

常量摘要折叠

DEFAULT_MODEL_PATHS =

应在其中查找 model 类的默认路径列表。如果存在 Rails,则会使用“应用/models”路径。(请参阅#model_paths。)

%w[ ./app/models ./lib/models ].冻结
DEFAULT_IGNORE_PATTERNS =

加载model时要忽略的匹配路径的默认通配符模式列表。默认为 '/models/concerns/',Rails 将其用于 model 扩展(无序加载时会导致错误)。

请参阅#ignore_patterns。

%w[ */models/concerns/* ].冻结

实例方法摘要折叠

实例方法详细信息

# files_under_path (path) ⇒ Array<String>

给定单个路径,返回该路径下的所有 Ruby 文件(或者,如果 preload_models 是 model 名称列表,则仅返回这些命名 model 的文件)。

参数:

  • 路径 ( string )

    搜索路径

返回:

  • ( Array<String> )

    规范化文件名,适合通过 require_dependencyrequire 加载。



61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/mongoid/loadable.rb', 第61行

def files_under_path(路径)
  的知识 = if preload_models.可调整大小?
            preload_models
              .map { |模型| " #{ path } / #{ model . underscore } .rb " }
              .SELECT { |file_name| file.存在吗?(file_name) }
          else
            目录.glob(" #{ path } /**/*.rb ")
               .拒绝 { |file_name| 忽略?(file_name) }
          end

  # 从每个条目中去掉路径和后缀
  的知识.map { |文件| 文件.gsub(%r{^#{path}/}, ' ').gsub(/\.rb$/, ' ') }
end

# files_under_paths (paths) ⇒ Array<String>

给定路径列表,返回该路径下的所有 Ruby 文件(或者,如果 preload_models 是 model 名称列表,则仅返回这些命名 model 的文件)。

参数:

  • paths ( Array<String> )

    要搜索的路径列表

返回:

  • ( Array<String> )

    规范化文件名,适合通过 require_dependencyrequire 加载。



49
50
51
# File 'lib/mongoid/loadable.rb', 第49行

def files_under_paths(paths)
  paths.flat_map { |路径| files_under_path(路径) }
end

#ignore_patternsArray<String>

返回通配符模式大量,用于确定模型加载器是否应忽略给定路径。

返回:

  • ( Array<String> )

    忽略模式大量



115
116
117
# File 'lib/mongoid/loadable.rb', 第115行

def ignore_patterns
  @ignore_patterns ||= DEFAULT_IGNORE_PATTERNS.dup
end

#ignore_patterns= (patterns) 对象

将忽略模式设置为给定的模式大量。 这些通配符模式可确定模型加载器是否应忽略给定路径。

参数:

  • 模式 ( Array<String> )

    通配符模式列表



132
133
134
# File 'lib/mongoid/loadable.rb', 第132行

def ignore_patterns=(模式)
  @ignore_patterns = 模式
end

# 忽略? (file_path) ⇒ true | false

如果给定文件路径与任何忽略模式匹配,则返回 true。

参数:

  • FILE_PATH ( string )

    要考虑的文件路径

返回:

  • ( true | false )

    是否应忽略给定的文件路径。



142
143
144
# File 'lib/mongoid/loadable.rb', 第142行

def 忽略?(FILE_PATH)
  ignore_patterns.任何? { |模式| file.fnmatch?(模式, FILE_PATH) }
end

# load_model (文件) ⇒对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

一种加载 model 文件的便捷方法。如果 Rails 的 require_dependency 方法存在,则使用该方法;否则将使用 require

例子:

加载模型。

Mongoid.load_model("/mongoid/behavior")

参数:

  • 文件 ( string )

    基本文件名。



85
86
87
88
89
90
91
# File 'lib/mongoid/loadable.rb', 第85行

def load_model(文件)
  if 定义?(require_dependency)
    require_dependency(文件)
  else
    require(文件)
  end
end

# load_models (paths = model_paths) ⇒对象

搜索模型路径列表以获取每个模型并引用它,以便索引和继承在开发和生产中都能发挥作用,并获得相同的结果。

例子:

从默认模型路径加载所有应用程序模型。

Mongoid.load_models

从一设立非标准路径加载所有应用程序模型。

Mongoid.load_models(%w( ./models ./admin/models ))

参数:

  • paths 数组 (默认为: model_paths

    应查找模型文件的路径列表。 这些必须是绝对路径,或是相对于当前工作目录的路径。



31
32
33
34
35
36
37
38
39
# File 'lib/mongoid/loadable.rb', 第31行

def load_models(paths = model_paths)
  的知识 = files_under_paths(paths)

  的知识.sort. do |文件|
    load_model(文件)
  end

  nil
end

# model_pathsArray<String>

返回应用程序的model定义所在路径的数组。如果 Rails 已加载,则默认为配置的“应用/model”路径(例如config.paths["app/models"]);否则,默认为 '%w(./ 应用/models ./lib/models)'。

请注意,这些路径是model所在目录层次结构的根;不必指示每个子目录,只要这些根路径位于 $LOAD_PATH 中即可。

返回:

  • ( Array<String> )

    模型路径大量



103
104
105
106
107
108
109
# File 'lib/mongoid/loadable.rb', 第103行

def model_paths
  @model_paths ||= if 定义?(Rails)
                     Rails.应用程序.config.paths['app/models'].已扩展
                   else
                     DEFAULT_MODEL_PATHS
                   end
end

# model_paths= (paths) ⇒对象

将model路径设置为给定的路径数组。这些是应用程序的model定义所在的路径。

参数:

  • paths ( Array<String> )

    模型路径列表



123
124
125
# File 'lib/mongoid/loadable.rb', 第123行

def model_paths=(paths)
  @model_paths = paths
end