(圖片來源)
學習Ruby語言,通常第一步都是實現CRUD(Create、Read、Update以及Delete的縮寫),雖然Ruby有提供所謂的鷹架系統(Scaffold),可以快速實現CRUD,但聽從了些前輩的意見,強烈建議還是要自己一步一步實際寫過CRUD,才能真正了解其中的精隨。目前我參考XDite所寫的Rails 101 作為一開始的基礎練習,沒什麼sense,經歷了一番折磨才完成,因此記錄一下這次的學習筆記。
作業練習:參考Scaffold,手刻Board的CRUD。
實現步驟:
- $ rails new 專案名稱(以下範例是:CRUD_Board)。
- 在 Gemfile 加上 gem ‘therubyracer’。
- $ bundle install。
- $ rails g model board name:string。
- $ rails g controller boards index。
- $ rake db:migrate。
- 實作 index action。
- 實作 new / create action (實現 C)
- 實作 show action (實現 R)。
- 在 config/routes.rb 加上 resources :boards。
- 實作 edit / update action。(實現 U)。
- 實作 destroy action。(實現 D)。
我寫好的範例:https://github.com/FrankyWu/CRUD_Board.git
前三步驟是在Ubuntu上新建一個ruby專案的基本步驟,就在這邊不贅述,第4~6步是建立MVC的架構,以及資料庫的佈署,建立一個名為board的model,其中只有一個name的欄位,type 是 string;以及建立一個相呼應的controller,並先建立一個index的action,這裡先建立一個觀念:
網址結構為: “ http:// localhost / boards / index / 1 ”
表示意思為: “ http://domain /controller / action / ID ”
建立board model
建立 board controller
建立完記得使用 $ rake db:migrate,把資料庫佈署好喔!
實作index action
1. app/controllers/boards_controller.rb中加入 index action 的功能,目的是將網頁導向主頁 index.html.erb。
2. 在app/views/boards新增 index.html.erb。
3. 使用rails s開啟伺服器的結果
2. 在app/views/boards新增 index.html.erb。
3. 使用rails s開啟伺服器的結果
實作 new / create action (實現 C) 以及
實作 show action (實現 R)
1. 回到 app/controllers/boards_controller.rb 中新增 new action 以及 show action。new 是新增使用者的畫面,show是顯示出所選擇的使用者畫面。
2. 再新增 create action,我們可以看出 create action不只是導向某個頁面,而是產生一個新的 params(ID),如果成功會導向成功建立,不成功會導向 new action並產生建立失敗。
3. 同樣的在 app/views/boards 新增 show.html.erb以及 new .html.erb。
4. 新增一個 _form.html.erb 是為了呈現類似相同的版型,我們可以看到new.html.erb就有導向form的頁面並處理error message。
5. 在主頁 index.html.erb 加入 show 跟 new的連結,就完成了CRUD中的C跟R了。
6. 因為開始會使用到資料庫的處理,所以必須在 config / routes.rb 加上 resources : boards。
7. 使用rails s開啟伺服器的結果。
2. 再新增 create action,我們可以看出 create action不只是導向某個頁面,而是產生一個新的 params(ID),如果成功會導向成功建立,不成功會導向 new action並產生建立失敗。
3. 同樣的在 app/views/boards 新增 show.html.erb以及 new .html.erb。
4. 新增一個 _form.html.erb 是為了呈現類似相同的版型,我們可以看到new.html.erb就有導向form的頁面並處理error message。
5. 在主頁 index.html.erb 加入 show 跟 new的連結,就完成了CRUD中的C跟R了。
6. 因為開始會使用到資料庫的處理,所以必須在 config / routes.rb 加上 resources : boards。
7. 使用rails s開啟伺服器的結果。
實作 edit / update action (實現 U)
1. 現在應該有點感覺了吧,仍然我們回到 app/controllers/boards_controller.rb加入edit 跟 update 的 action,edit是修改選擇的使用者畫面,update則是修改後對資料庫的更新。
2. 在 app/views/boards 新增 edit.index.erb,同樣的會導向 _form,因為跟new的頁面很像,不用重複在刻,唯一的差別是底下多了show的連結點。
3. 修改 index.erb.html 把 edit的連結點放上去。
4. 因為會導到show 我們也要修該一下 show.index.html,可以讓他回到edit的頁面。
5. 這樣就完成CRUD的U了,讓我們看一下結果吧!
實作 destroy action (實現 D)
1. 終於來到最後一個action,也是最簡單的一步,再撐一下,app/controllers/boards_controller.rb新增destroy action。
2. 修改 index.html.erb。
3. 大功告成!
這次只做了「流程上」的解說,畢竟先後順序出了個差錯,就會進入萬劫不復的地獄(也沒這麼糟啦),完成了這次的作業對CRUD已經有了基礎的知識,之後再慢慢去了解其中的語法跟意義,應該就不會太難,下篇繼續介紹CRUD的POST作業,敬請期待囉!
參考文件:
1. Rails 101:http://rails-101.logdown.com/
2. 麥克阿忠的 Ruby on Rails 真功夫:http://www.openfoundry.org/tech-column/8478