Ruby on Rails Tutorial Part I

3,208 views
3,087 views

Published on

The Ruby on Rails Tutorial for OSDC 09。

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,208
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
73
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Ruby on Rails Tutorial Part I

  1. 1. Ruby on Raila Tutorial Part I Author: Lu Wei Jen
  2. 2. Agenda • Ruby and Rails on Windows • Build a Simple DailyLog Application • The Rails Framework • Restful • Writing Code with Unit Test
  3. 3. Install Ruby and Rails on Windows(1) • BitNami RubyStack Installer. • http://bitnami.org/stack/rubystack • Included – Ruby – Rubygems – Rails – Git – Mysql – Apache – Some useful gems
  4. 4. Install Ruby and Rails on Windows(2) • One-Click Ruby Installer • http://rubyforge.org/projects/rubyinstaller/ • Only install ruby and rubygems.
  5. 5. Ruby and Rails IDE • NetBeans – http://www.netbeans.org/ • Aptana – http://www.aptana.com/
  6. 6. Sqlite on Windows • Ruby on Rails 預設使用的資料庫系統。 • 在開發時更容易入手的資料庫系統。 • 要改成MySQL等資料庫系統,只需安裝相對 應的adapter plugin,與換掉database.yml檔 案即可。 • Sqlite官網: http://www.sqlite.org/
  7. 7. Git on Windows • Ruby on Rails 官方的版本控制系統 • GitHub 一大堆有的沒有的ruby or rails plugin 存放的地方 • Git 官網 http://git-scm.com/
  8. 8. Update Rails to 2.3.2.x • Input the following commands – gem install rubygems-update – update_rubygems – gem insatll rails – 如果你使用Vista,請關閉UAC
  9. 9. Create DailyLog Application • User Story – 使用者可以記錄每一筆收入與支出。 – 使用者可以瀏覽所有收入與支出。 – 可以刪除某筆收入或支出紀錄。 – 使用者可以瀏覽收入總額與支出總額。
  10. 10. Create a New Project • In NetBeans: File -> New Project
  11. 11. Create a New Project(2) • Setup the project name and ruby platform
  12. 12. Create a New Project(3) • Setup database
  13. 13. Create a New Project(4) • Select rails version.
  14. 14. The Rails Framework Rails files’ viewpoint Rails projects’ viewpoint
  15. 15. The Rails Framework - MVC (1) • MVC – Model, View, Controller • Model: – 負責處理數據與邏輯。 – 與資料庫系統的連接。 • View: – 負責處理使用者介面。 • Controller: – 負責處理使用者請求。 – Model 與 view間的橋梁。
  16. 16. The Rails Framework - MVC (2)
  17. 17. The Rails Framework - config Folder • environment.rb: – 系統所有模式均需要的組 態程式。 • database.yml: – 資料庫系統相關設定 。 • routes.rb: – 使用者需求與系統路徑的 對應(map)。 • environments – 在某種執行模式時,所需 要的組態程式。
  18. 18. The Rails Framework – Others(1) • db: 資料庫資料表模型 與migration。 • doc: 系統相關文件 • lib: 放置函式庫,例如 Façade。 • log: 系統執行紀錄。 • public: 放置靜態的web 檔案,如html, 圖 片, javascript, css檔案
  19. 19. The Rails Framework – Others(1) • script: 啟動與管理rails 的一些工具程式。 • test: 放置rails的測試程 式。 • tmp: 放置某些在處理 過程中所需的暫時性 文件。 • vendor: 別人寫的程式 庫或者工具。
  20. 20. Let’s Write Code
  21. 21. Scaffold
  22. 22. Create Database
  23. 23. Run Web Server
  24. 24. Home Page
  25. 25. Index Page
  26. 26. Create, Update
  27. 27. Show an Item
  28. 28. Delete an Item
  29. 29. What’s Happened
  30. 30. Database Configuration RAILS_ROOT/config/database.yml
  31. 31. Migration(1) • 用Ruby來寫Database schema。 • 依序執行,也可以依序退回,方便維護。 • 跨資料庫系統的資料型態支援。 • 支援的資料型態: – binary, boolean, date, datetime, decimal, float, int eger, string, text, time, timestamp.
  32. 32. Migration (2) -RAILS_ROOT/db/migrate/20090415170848_create_accounts.rb
  33. 33. Model -RAILS_ROOT/app/models/account.rb
  34. 34. Controllers (1)
  35. 35. Controllers (2) -RAILS_ROOT/app/controllers/application_controller.rb
  36. 36. Controllers (3) -RAILS_ROOT/app/controllers/account_controller.rb The Actions
  37. 37. Restful (1) • Restful是一個好的方式來針對controllers與 actions命名。 • Restful是一個好的方式來區隔Service。 – 我們要提供什麼樣的service? – 如何針對這個service做操作? (CRUD) • Rails 2.x後,route的機制都預設為Rest。
  38. 38. Restful (2) HTTP METHODS SERVICE METHODS POST CREATE POST + /accounts/ Create an account record GET READ GET + /accounts/1 Show an account record which id = 1 PUT UPDATE PUT + /accounts/1 Update an account record which id = 1 DELETE DELETE DELETE + /accounts/1 Delete an account record which id = 1
  39. 39. Restful - route -RAILS_ROOT/config/routes.rb • routes.rb 就像是系統的地圖,負責將使用者的需 求導引到正確的地方。 • 開發者要提供services時,需要在這裡進行註 冊。 • map.resources 一共會提供7個actions。
  40. 40. Action & View • Action: 處理使用者要求的地方。 • View: 回應使用者要求的介面。 • 在RAILS_ROOT/app/views 下面會有與 controller同名的目錄,存放介面檔案。
  41. 41. Action & View – index (1) -RAILS_ROOT/app/controllers/accounts_controllers - http://localhost:3000/accounts
  42. 42. Action & View – index (2) • 同樣一個action,不一定只能回應(response) 一種介面樣式。 • Ex. http://localhost:3000/accounts.xml => 回 傳xml的介面樣式。 • 減少了重複的程式碼。 • 更容易跨平台。
  43. 43. Action & View – index (3) -RAILS_ROOT/app/views/accounts/index.html.erb - http://localhost:3000/accounts
  44. 44. URL Helpers Methods GET POST PUT DELETE Helpers /accounts/1 /accounts/1 /accounts/1 account_path(@account) show update delete /accounts /accounts accounts_path index create /accounts/1/edit edit_event_path(@account) edit /accounts/new new_events_path new
  45. 45. Action & View - new
  46. 46. Action & View - create
  47. 47. Helper • 在View中,會被重複使用到的函式可以放 在這裡。 • 例如: 時間表示格式,金額表示格式。
  48. 48. Helper - Example -RAILS_ROOT/app/helpers/accounts_helper.rb
  49. 49. Unit Test on Rails
  50. 50. Why You Need Unit Test • 更容易修改或者改善你的程式碼。 • 更容易與其他系統整合。 • 測試程式碼就是你的文件(的一部分)。 • 你在寫測試程式時,你就是在設計你的目 的程式。(Writing tests before writing the code being tested.) • Rails社群提供了很好的工具讓你進行Unit Test。
  51. 51. RSpec plugin • RSpec 官網: http://rspec.inof • Install RSpec, Rspec-rails on Rails 2.3.x – gem install rspec rspec-rails • Generate RSpec framework for your project
  52. 52. 我該怎麼測試 • User Story: 呈現我的支出總額 – 我先製造10筆紀錄,其中五筆是收入,五筆式 支出。 – 我需要一個Account.total_outgoing的函式來呈 現支出總額。 – 我會把10筆紀錄都從資料庫中撈進來,然後把 每一筆記錄的outgoing欄位加總。 – Account.total_outgoing 的支出總額應該是 1500.0元
  53. 53. Fixtures
  54. 54. Write RSpec Code
  55. 55. 第一次的測試 •NoMethodError 因為我們還沒寫實際的目的程式
  56. 56. 第二次的測試 •有 total_outgoing 程式了,可是回傳不對,是時候寫目的程式了。
  57. 57. 第一次寫的目的程式
  58. 58. 第三次的測試 •仍然有錯,原因是有些紀錄中,outgoing 是 nil。
  59. 59. 第二次寫的目的程式
  60. 60. 第四次的測試 •終於成功了。 •一次把所有資料都撈進來然後計算好像很笨耶。 •我需要Refactor。
  61. 61. Refactor • Red – Green - Refactor • 第一次寫的程式是為了達到目的。 • 第二、三…次寫的程式是為了更好。 • Unit Test 可以確保你的修改不影響結果。
  62. 62. 第三次寫的目的程式
  63. 63. 第五次的測試 •我們有了比較好的效能了。 •我們還可以更好。 •ㄟ~~,下次好了。
  64. 64. End 謝謝大家

×