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
每次您構建一個新模型時,都會自動生成遷移,因此您不需要為每個模型手動生成遷移。通常,當您需要更改現有模型或需要聯接表時,您會使用遷移生成器。同樣,檔名開頭的 時間戳將有所不同。