文件名和自动加载
Rails 文件 - 以及一般的 Ruby 文件 - 应该用 lower_snake_case
文件名命名。例如
app/controllers/application_controller.rb
是包含 ApplicationController
类定义的文件。请注意,虽然 PascalCase
用于类和模块名称,但它们所在的文件仍然应该是 lower_snake_case
。
一致的命名很重要,因为 Rails 根据需要使用自动加载文件,并使用变形在不同的命名样式之间进行转换,例如将 application_controller
转换为 ApplicationController
然后再转换回来。
例如,如果 Rails 发现 BlogPost
类不存在(尚未加载),它将查找名为 blog_post.rb
的文件并尝试加载该文件。
因此,为文件命名它们包含的内容也很重要,因为自动加载器需要文件名匹配内容。例如,如果 blog_post.rb
包含一个名为 Post
的类,你会看到一个 LoadError
:Expected [some path]/blog_post.rb to define BlogPost
。
如果你在 app/something/
下添加一个目录(例如/ models / products /),和
- 想要在新目录中命名模块和类,那么你不需要做任何事情,它将被自己加载。例如,在
app/models/products/ you would need to wrap your class in
module Products`中。 - 不想在我的新目录中命名模块和类,然后你必须将
config.autoload_paths += %W( #{config.root}/app/models/products )
添加到你的application.rb
到自动加载。
还有一件需要注意的事情(特别是如果英语不是你的第一语言)是 Rails 在英语中占不规则复数名词的事实。因此,如果你的模型名为 Foot
,则相应的控制器需要被称为 FeetController
而不是 FootsController
,如果你想要使用 rails魔术路由(以及更多此类功能)。