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),最後但並非最不重要的是,還添加了一條路由。如您所見,腳手架為我們做了很多工作。但請記住,生成的程式碼非常基礎,離“好”還差得很遠,但它已經為您提供了一個良好的起點。