[Rails學習之路]Rails文件結構與路由

約定優於配置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 文件夾中。
    README.rdoc 程序的簡單說明。你應該修改這個文件,告訴其餘人這個程序的做用,如何安裝等。
  • test/ 單元測試,固件等測試用文件。詳情參閱「測試 Rails 程序」一文。
  • tmp/ 臨時文件,例如緩存,PID,會話文件。
  • vendor/ 存放第三方代碼。常常用來放第三方 gem。

項目中最經常使用的是app/這個目錄,在它下面又有MVC模型的controllers/views/models/等幾個子目錄。緩存

controllers/下面有people_controller.rb文件,其中的類叫作PeopleController。Rails約定,控制器中的命名默認爲複數,若是你沒有在路由中指定其餘的控制器的話。咱們建立的模型叫person,因此它的複數就是people。
在控制器中有indexshowneweditcreateupdatedestroy等方法,這些方法叫作控制器的動做。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爲後綴的indexnewshowedit等文件。這些文件都和控制器的動做相關聯。把它們關聯在一塊兒的就是Rails的路由設置config/routes.rb單元測試

這裏面只有一條規則,測試

resources :people

建立了people這個資源。Rails使用資源來實現REST。它實際上等價於下面的幾條規則:

或者借用Ruby on Rails 實戰聖經的這個表格更好認識(原圖中資源爲events):

相關文章
相關標籤/搜索