文件名和自动加载

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 的类,你会看到一个 LoadErrorExpected [some path]/blog_post.rb to define BlogPost

如果你在 app/something/下添加一个目录(例如/ models / products /),和

  • 想要在新目录中命名模块和类,那么你不需要做任何事情,它将被自己加载。例如,在 app/models/products/ you would need to wrap your class inmodule Products`中。
  • 不想在我的新目录中命名模块和类,然后你必须将 config.autoload_paths += %W( #{config.root}/app/models/products ) 添加到你的 application.rb 到自动加载。

还有一件需要注意的事情(特别是如果英语不是你的第一语言)是 Rails 在英语中占不规则复数名词的事实。因此,如果你的模型名为 Foot,则相应的控制器需要被称为 FeetController 而不是 FootsController,如果你想要使用 rails魔术路由(以及更多此类功能)。