> For the complete documentation index, see [llms.txt](https://kelby.gitbook.io/rails-beginner-s-guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kelby.gitbook.io/rails-beginner-s-guide/rails/application_surface/root_and_path.md).

# 路径 - Root 和 Path

包括 Root & Path，但 Root 已经封装了 Path, 并且只有 Root 对外提供接口。

## Root

```ruby
Rails.application.paths
```

提供方法：

```
add

all_paths

autoload_once
autoload_paths
eager_load
load_paths
```

和

```
keys
values
values_at

[]
[]=
```

这部分内容，偏底层了。

## Path

Path 元编程提供的几个方法，也挺有用的：

```ruby
%w(autoload_once eager_load autoload load_path).each do |m|
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
    def #{m}!        # def eager_load!
      @#{m} = true   #   @eager_load = true
    end              # end
                     #
    def skip_#{m}!   # def skip_eager_load!
      @#{m} = false  #   @eager_load = false
    end              # end
                     #
    def #{m}?        # def eager_load?
      @#{m}          #   @eager_load
    end              # end
  RUBY
end
```

另，Path 行为和数组有点类似，并且它还 `include Enumerable`，所以部分操作也可用。
