Ruby on Rails/内置 Rails 工具/生成器
Rails 带有一系列生成器,用于创建模型、控制器、视图、单元测试、迁移等的存根文件。生成器通过命令行脚本访问RAILS_ROOT/script/generate
所有命令看起来像
rails generate generator generator-options
要查看可用的选项,只需输入
rails generate
Rails 将向您显示所有可用的选项以及当前安装的生成器。默认情况下,您可以从不同的生成器中选择。最重要的生成器是
- controller
- helper
- mailer
- migration
- model
- scaffold
如果您想了解更多关于不同生成器的信息,只需输入生成器命令,例如“script/generate model”在控制台中,您将获得有关此特定命令的信息以及解释生成器功能的示例。
您可以多次对同一个控制器使用生成器,但请注意:它将为您提供覆盖控制器文件的选项(以添加您指定的动作)。只要您没有修改控制器,这可能没问题,但如果您已经添加了代码,请确保您不会覆盖它,并返回手动添加动作方法。
要生成模型,请使用以下命令
rails generate model ModelName column:datatype column:datatype [...]
将 ModelName 替换为模型名称的驼峰式版本。例如
rails generate model Person name:string age:integer
这将生成以下内容
exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/person.rb create test/unit/person_test.rb create test/fixtures/people.yml exists db/migrate create db/migrate/20090607101912_create_people.rb
任何必要的目录将自动创建。现有目录将不会被替换。文件app/models/person.rb包含 Person 类。test/unit/person_test.rb包含 Person 类的单元测试存根。test/fixtures/people.yml包含测试数据的存根,这些数据将在测试运行期间用于填充测试数据库。该db/migrate/20090607101912_create_people.rb包含 Person 类的数据库迁移存根。请注意,文件开头的 时间戳(20090607101912)将始终不同,具体取决于您创建文件的时间。还要注意 Rails 如何将类名变为复数形式,以使用复数形式作为对应的表、夹具和迁移名称。
要生成控制器,请使用以下命令
rails generate controller ControllerName [actions]
将 ControllerName 替换为控制器的驼峰式版本。当没有给出任何操作时,Rails 将创建一个响应所有 7 个 REST 操作(new、create、update、edit、destroy、index 和 show)的控制器
rails generate controller People
将生成以下输出
exists app/controllers/ exists app/helpers/ create app/views/people exists test/functional/ exists test/unit/helpers/ create app/controllers/people_controller.rb create test/functional/people_controller_test.rb create app/helpers/people_helper.rb create test/unit/helpers/people_helper_test.rb
文件app/controllers/people_controller.rb包含 PeopleController 类。test/functional/people_controller_test.rb包含 PeopleController 类的功能测试存根。app/helpers/people_helper.rb是助手方法的存根,这些方法将对该控制器及其关联的视图可用。在app/views/people中,您将找到为控制器创建的模板。根据给定的参数,将有不同的文件。
要生成迁移,请使用以下命令
rails generate migration MigrationName column:datatype column:datatype [...]
将 MigrationName 替换为迁移名称的驼峰式版本。例如
generate migration AddCityToPerson
这将生成以下内容
exists db/migrate create db/migrate/20090607103358_add_city_to_person.rb
每次您构建一个新模型时,都会自动生成迁移,因此您不需要为每个模型手动生成迁移。通常,当您需要更改现有模型或需要联接表时,您会使用迁移生成器。同样,文件名开头的 时间戳将有所不同。