約定優於配置和RESTful是Ruby on Rails十分推崇的哲學。在一個默認的RESTful的Rails項目中,使用資源和HTTP動詞來幫助組織項目。
假若有一個使用scaffold
建立的Rails項目,它的建立代碼像下面這樣:html
rails new hello_rails cd hello_rails/ rails generate scaffold person name:string
執行以後獲得的文件結構以下(原文來自Ruby on Rails 指南):數據庫
app/
存放程序的控制器、模型、視圖、幫助方法、郵件和靜態資源文件。本文主要關注的是這個文件夾。bin/
存放運行程序的 rails 腳本,以及其餘用來部署或運行程序的腳本。config/
設置程序的路由,數據庫等。詳情參閱「設置 Rails 程序」一文。config.ru
基於 Rack 服務器的程序設置,用來啓動程序。db/
存放當前數據庫的模式,以及數據庫遷移文件。Gemfile, Gemfile.lock
這兩個文件用來指定程序所需的 gem 依賴件,用於 Bundler gem。關於 Bundler 的詳細介紹,請訪問 Bundler 官網。lib/
程序的擴展模塊。log/
程序的日誌文件。public/
惟一對外開放的文件夾,存放靜態文件和編譯後的資源文件。Rakefile
保存並加載可在命令行中執行的任務。任務在 Rails 的各組件中定義。若是想添加本身的任務,不要修改這個文件,把任務保存在 lib/tasks 文件夾中。test/
單元測試,固件等測試用文件。詳情參閱「測試 Rails 程序」一文。tmp/
臨時文件,例如緩存,PID,會話文件。vendor/
存放第三方代碼。常常用來放第三方 gem。項目中最經常使用的是app/
這個目錄,在它下面又有MVC模型的controllers/
、views/
、models/
等幾個子目錄。緩存
在controllers/
下面有people_controller.rb
文件,其中的類叫作PeopleController
。Rails約定,控制器中的命名默認爲複數,若是你沒有在路由中指定其餘的控制器的話。咱們建立的模型叫person,因此它的複數就是people。
在控制器中有index
、show
、new
、edit
、create
、update
、destroy
等方法,這些方法叫作控制器的動做。ruby
在models/
下面有person.rb
。Rails約定模型名默認是單數。打開這個文件後,裏面卻什麼都沒有。服務器
class Person < ActiveRecord::Base end
這是由於在Rails中,模型的內容是隨着數據庫中對應的表變化的,這一點和其餘的ORM略有不一樣。若是須要修改模型的內容,只需修改數據庫便可。而修改數據庫並不須要手工去作,Rails中有遷移(migration)這個機制能夠幫助咱們實現。好處一是咱們的修改是數據庫無關的;二是能夠方便作版本控制。app
打開db/migrate/*_create_people.rb
。這段代碼建立了一張people表:ide
class CreatePeople < ActiveRecord::Migration def change create_table :people do |t| t.string :name t.timestamps end end end
咱們執行bin/rails db:migrate
命名來執行遷移,這時Rails在後臺創建了people表,使用的是config/database.yaml
中設置的數據庫,默認就是SQLite。佈局
最後看一下views/
目錄。在它下面除了和佈局相關的layouts/
,就是people/
目錄。其中有以.html.erb
爲後綴的index
、new
、show
、edit
等文件。這些文件都和控制器的動做相關聯。把它們關聯在一塊兒的就是Rails的路由設置config/routes.rb
。單元測試
這裏面只有一條規則,測試
resources :people
建立了people這個資源。Rails使用資源來實現REST。它實際上等價於下面的幾條規則:
或者借用Ruby on Rails 實戰聖經的這個表格更好認識(原圖中資源爲events):