Ruby on Rails/入门/创建应用程序
创建您的第一个 Rails 应用程序就像在控制台中输入以下命令一样简单
rails firstapplication
这将在当前目录中创建 Rails 应用程序。如果您需要使用除默认数据库 (SQLite3) 之外的其他数据库,您可以使用-d参数指定数据库。如果您需要例如 MySQL 支持,请使用以下命令创建您的应用程序
rails firstapplication -d mysql
这将设置您需要的基本文件和文件夹。让我们看一下这些文件和文件夹以及它们的用途。
创建 Rails 应用程序后,您将看到一个目录结构。下表将介绍这些文件夹及其用途。
| 文件/文件夹 | 用途 |
|---|---|
| app/ | 这是您将大部分时间工作的地方。它包含您的模型、视图和控制器。 |
| app/model | 包含您项目的所有模型。 |
| app/view | 包含所有 HTML 文件在一个文件夹内。这些文件以控制器中的相应操作命名。此外,这些文件被分组到带有控制器名称的文件夹中。 |
| app/controller | 包含 Rails 应用程序的逻辑。 |
| db/ | 所有与数据库相关的文件都放在这个文件夹中。如果您使用的是 SQLite,那么数据库很可能作为 *.sqlite3 文件存在于这个文件夹中。 |
| db/migrate | 包含您创建的所有迁移。 |
| config/ | 顾名思义,它包含 Rails 应用程序的所有必要配置文件。只需要很少的配置,所以不必担心要浏览无数行代码。本地化、路由 和所有基本文件都可以在这里找到。 |
| public/ | 所有静态文件(不会动态更改的文件)如 CSS 或 JavaScript 文件都位于此文件夹中。 |
| public/images | 所有静态图像。 |
| public/javascripts | 嵌入 Javascript、CSS 或图像时,默认位置是在这些文件夹中。Rails 将自动在这些文件夹中查找正确的文件。 |
| public/stylesheets | 嵌入 CSS 时,默认位置是在这个文件夹中。Rails 将自动在这个文件夹中查找正确的文件。 |
| script/ | 包含用于 Rails 的脚本,提供各种任务。这些脚本链接到另一个文件,其中包含“实际”文件。在这些文件夹中,您将找到生成器、服务器和控制台。 |
| log/ | 来自应用程序的日志文件。如果您想调试应用程序的某些部分,您可以查看这些文件。 |
| test/ | 用于测试应用程序的所有文件。 |
| doc/ | 当前 Rails 应用程序的文档。 |
| lib/ | 应用程序的扩展模块。 |
| vendor/ | 只要您有第三方插件,它们都将在这个文件夹中找到。 |
| tmp/ | 临时文件。 |
| README | 关于如何设置应用程序、它有哪些特性或要注意哪些事项的基本指南,供其他人参考。 |
| Rakefile | 处理应用程序中的所有 Rake 任务。 |
大多数 Rails 文件可以通过在控制台中输入一个简单的命令来创建,该命令告诉 Rails 您想要什么。这样,您可以创建数据库迁移、控制器、视图等等。所有命令看起来都像
rails generate generator generator-options
要查看可用的选项,只需在应用程序目录中输入
cd firstapplication rails generate
Rails 会显示所有可用的选项以及当前安装的生成器。默认情况下,您可以从不同的生成器中选择。最重要的生成器是
- controller
- helper
- mailer
- migration
- model
- scaffold
如果您想要更多关于不同生成器的信息,只需在控制台中输入生成器命令,例如script/generate model您将获得有关此特定命令的信息以及解释生成器作用的示例。
使用生成器时,Rails 会按照约定以正确的方式创建和命名所有必需的文件。这在处理迁移时尤其重要(参见后面的内容)。Rails 永远不会覆盖已存在的文件(除非您明确告诉 Rails 这样做)。
一个很好的入门方法是scaffold您的文件。这将为您的文件创建一个基本的 CRUD 结构。(CRUD=Create Read Update and Delete;这反映了 SQL 属性 create、insert、update 和 delete)脚手架不仅创建您的迁移,而且还创建一个包含最基本语法的控制器和一个带有用于非常基本的显示和编辑数据的模板的视图文件夹。要使用脚手架,我们将使用生成器。脚手架生成器需要一个模型/控制器以及正确的字段和类型(格式为 field:type)。
假设我们要为不同的产品创建标签,我们可以使用
rails generate scaffold Tag name:string popularity:integer
在控制台中,Rails 会向我们提供有关它创建的文件的信息
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/tags
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists test/unit/helpers/
exists public/stylesheets/
create app/views/tags/index.html.erb
create app/views/tags/show.html.erb
create app/views/tags/new.html.erb
create app/views/tags/edit.html.erb
create app/views/layouts/tags.html.erb
identical public/stylesheets/scaffold.css
create app/controllers/tags_controller.rb
create test/functional/tags_controller_test.rb
create app/helpers/tags_helper.rb
create test/unit/helpers/tags_helper_test.rb
route map.resources :tags
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/tag.rb
create test/unit/tag_test.rb
create test/fixtures/tags.yml
exists db/migrate
create db/migrate/20090420180053_create_tags.rb
让我们快速浏览一下我们现在拥有的文件:首先,Rails 在视图中创建了一个名为tags的单独文件夹。在这个文件夹中,我们有一些不同的模板文件。此外,我们还有一个控制器(tags_controller.rb)、用于测试的文件(tags_controller_test.rb, tags_helper_test.rb, tags.yml, tag_test.rb)、助手(tags_helper.rb)、一个迁移文件(20090420180053_create_tags.rb),最后但并非最不重要的是,还添加了一条路由。如您所见,脚手架为我们做了很多工作。但请记住,生成的代码非常基础,离“好”还差得很远,但它已经为您提供了一个良好的起点。