約定優於配置和restful是ruby on rails十分推崇的哲學。在乙個預設的restful的rails專案中,使用資源和http動詞來幫助組織專案。
假如有乙個使用scaffold
建立的rails專案,它的建立**像下面這樣:
rails new hello_rails
cd hello_rails/
rails generate scaffold person name:string
bin/
存放執行程式的 rails 指令碼,以及其他用來部署或執行程式的指令碼。
config/
設定程式的路由,資料庫等。詳情參閱「設定 rails 程式」一文。
config.ru
基於 rack 伺服器的程式設定,用來啟動程式。
db/
存放當前資料庫的模式,以及資料庫遷移檔案。
lib/
程式的擴充套件模組。
log/
程式的日誌檔案。
public/
唯一對外開放的資料夾,存放靜態檔案和編譯後的資源檔案。
rakefile
儲存並載入可在命令列中執行的任務。任務在 rails 的各元件中定義。如果想新增自己的任務,不要修改這個檔案,把任務儲存在 lib/tasks 資料夾中。
readme.rdoc 程式的簡單說明。你應該修改這個檔案,告訴其他人這個程式的作用,如何安裝等。
test/
單元測試,韌體等測試用檔案。詳情參閱「測試 rails 程式」一文。
tmp/
臨時檔案,例如快取,pid,會話檔案。
vendor/
存放第三方**。經常用來放第三方 gem。
在controllers/
下面有people_controller.rb
檔案,其中的類叫做peoplecontroller
。rails約定,控制器中的命名預設為複數,如果你沒有在路由中指定其他的控制器的話。我們建立的模型叫person,所以它的複數就是people。
在控制器中有index
、show
、new
、edit
、create
、update
、destroy
等方法,這些方法叫做控制器的動作。
在models/
下面有person.rb
。rails約定模型名預設是單數。開啟這個檔案後,裡面卻什麼都沒有。
class person < activerecord::base
end
這是因為在rails中,模型的內容是隨著資料庫中對應的表變化的,這一點和其他的orm略有不同。如果需要修改模型的內容,只需修改資料庫即可。而修改資料庫並不需要手工去做,rails中有遷移(migration)這個機制可以幫助我們實現。好處一是我們的修改是資料庫無關的;二是可以方便做版本控制。
開啟db/migrate/*_create_people.rb
。這段**建立了一張people表:
class createpeople < activerecord::migration
def change
create_table :people do |t|
t.string :name
t.timestamps
endend
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):
(本文系原創,同步自我的)
開始學習rails
在學習了rails一段時間後,我決定寫個簡單的程式練練手。由於ruby是解釋型語言,對開發工具依賴不大,因此只用notepad 編寫ruby 用kompozer寫html頁面。我先寫後台controller和model,把對資料庫操作的語句都放在model類裡面,然而我發現activerecord實...
Rails學習筆記(二)
1 在啟動web伺服器時,可以通過加上 e選項,指定啟動時選用哪個環境 ruby script server e development test production 2 rails裡強調 慣例重用配置 從資料庫中的表,到控制器,到模型,再到檢視,命名是有關聯的!檔案的存放路徑也是有關聯的。我們在...
Rails學習筆記(四)
1 rails內建了很多驗證,在提交表單時,可以直接使用rails提供的驗證。rails中關於程度和資料庫的連線環節是在model裡的,在model裡使用validates x of可以完成常用的驗證。常用的有 1 validates presence of 用於驗證非空 輸入空格也算空 2 val...