51
http://creativecommons.org/licenses/by-nc/2.5/tw/ Ruby on Rails Part1: 簡介 [email protected] 2009年9月21日星期一

Ruby on Rails : 簡介與入門

  • View
    24.408

  • Download
    5

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 2: Ruby on Rails : 簡介與入門

關於我

• 張文鈿 (a.k.a ihower)http://ihower.idv.tw/blog/

2009年9月21日星期一

Page 3: Ruby on Rails : 簡介與入門

關於我

• 張文鈿 (a.k.a ihower)http://ihower.idv.tw/blog/

• 和多股份有限公司 軟體設計師

http://handlino.com

2009年9月21日星期一

Page 4: Ruby on Rails : 簡介與入門

關於我

• 張文鈿 (a.k.a ihower)http://ihower.idv.tw/blog/

• 和多股份有限公司 軟體設計師

http://handlino.com

2009年9月21日星期一

Page 5: Ruby on Rails : 簡介與入門

什麼是 Rails?

• 開放原始碼 (採用MIT授權) 的 Web 框架,主要用於開發database-backed 的網站應用程式

• MVC (Model-View-Control )模式

• (幾乎可以)完全地 Ruby 開發環境,包括支援 Ajax、定義資料庫結構、ORM (object-relational-mapping) 機制操作資料庫等等。

• 2004 年由 David Heinemeier Hanson(DHH) 從 37signals 產品中獨立出來。

2009年9月21日星期一

Page 6: Ruby on Rails : 簡介與入門

設計原則與特色

• 不重複自己 Don’t Repeat Yourself (DRY)

• 慣例勝於設定 Convention Over Configuration

• 基於 Ruby 自然、簡潔的語法

• 更少的程式碼做更多事• 高生產力、開發迅速• 具備高度修改彈性• 寫出漂亮的程式碼、讓開發變有趣

2009年9月21日星期一

Page 7: Ruby on Rails : 簡介與入門

什麼樣的網站最適合使用 Ruby on Rails 開發?

• 一個資料庫形式的網站 (透過存取資料庫,動態產生

內容的網站) 或是有足夠規模到適合使用一個強大功能的框架。

• 一個特別而不適用於傳統的 CMS 系統 (若 Joomla 或 Durpal 完全符合你所需,這些系統會是更容易的選擇)

• 一個全新的應用,允許開發人員開始全新的資料庫跟軟體架構。

2009年9月21日星期一

Page 8: Ruby on Rails : 簡介與入門

Rails 的成長

• 2005 年 DHH 從獲得年度最佳 Hacker

• 2006 年 Rails 獲得 Jolt 年度最佳產品

• 2005~2006 年 Ruby/Rails 相關書籍銷售量提昇1552%

• Ruby 程式語言在 Tiobe 的排名從 26 名提升到現在第 10 名

2009年9月21日星期一

Page 9: Ruby on Rails : 簡介與入門

Rails 開發有多快?Java(Spring/Hibernate) Rails

交貨時間 4個月,每週約20小時 4個晚上(每晚5小時)

程式碼行數 3293 1164

組態行數 1161 113

類別數/方法數 62/549 55/126

Justin Gehtland 是 Java 專家,這是他一開始採用 Rails 的實際數據

2009年9月21日星期一

Page 10: Ruby on Rails : 簡介與入門

Rails 有多省程式碼?

• Justin Gehtland 提出 Java :Rails = 3.5 : 1

• Proc.net 提出 PHP : Rails = 10 : 1

• JavaEye 站長估計 JAVA : Rails = 10 : 1

• thegiive 實驗的結果 PHP : Rails = 8 : 1

2009年9月21日星期一

Page 11: Ruby on Rails : 簡介與入門

Rails clone

2009年9月21日星期一

Page 12: Ruby on Rails : 簡介與入門

Rails 如何運作?

C

M

V

MVCModel-View-Control

2009年9月21日星期一

Page 13: Ruby on Rails : 簡介與入門

DB schema使用 Ruby 語法定義

class CreatePeople < ActiveRecord::Migration def self.up create_table :people do |t| t.string :name t.integer :age t.date :birthday t.text :bio t.timestamps end end

def self.down drop_table :people endend

2009年9月21日星期一

Page 14: Ruby on Rails : 簡介與入門

Active RecordORM 機制

class Person < ActiveRecord::Base # 一行都不用寫end

person = Person.newperson.name "ihower"person.age = 18person.save

person = Person.find(1)puts person.name # 輸出 ihower

2009年9月21日星期一

Page 15: Ruby on Rails : 簡介與入門

Action Controller處理 HTTP request 流程

class PeopleController < ApplicationController

# GET /people def index @people = Person.all end end

2009年9月21日星期一

Page 16: Ruby on Rails : 簡介與入門

Action Controller處理 HTTP request 流程

class PeopleController < ApplicationController

# GET /people def index @people = Person.all end end

一個 method 代表一個 action

2009年9月21日星期一

Page 17: Ruby on Rails : 簡介與入門

Action Controller處理 HTTP request 流程

class PeopleController < ApplicationController

# GET /people def index @people = Person.all end end

instance variable 將會傳入 View

一個 method 代表一個 action

2009年9月21日星期一

Page 18: Ruby on Rails : 簡介與入門

Action View 可內嵌 Ruby 語法的 HTML

<html> <body> <h1>Guestbook</h1> <% @people.each do |person| %> <p><%= person.name %>: <%= person.bio %></p> <% end %> </body></html>

2009年9月21日星期一

Page 19: Ruby on Rails : 簡介與入門

Why Rails?

• 增加開發生產力• 讓寫程式變有趣• 快速原型(prototyping)

• 程式碼容易維護• 開放原始碼

2009年9月21日星期一

Page 20: Ruby on Rails : 簡介與入門

Because Rails is ...

• MVC 架構

• 適合敏捷式開發• 慣例勝於設定• ActiveRecord ORM 機制

• 不重複自己(DRY)

• 支援最新技術潮流 (Ajax 和 RESTful 介面)

• 內建測試能力• Ruby 程式語言(開發快)

• 料庫 Migration 機制

2009年9月21日星期一

Page 21: Ruby on Rails : 簡介與入門

Thank you.

參考資料:

Get to the Point! (http://johnwlong.com/slides/gettothepoint/)

Ruby on Rails slide by thegiive in COSCUPDelivery of the key adoption Factors and key characteristics of companies using ruby on rails by Michel Barbosa

2009年9月21日星期一

Page 23: Ruby on Rails : 簡介與入門

• 開始之前可以先閱讀這篇文章http://ihower.idv.tw/blog/archives/1743

• 本課程有上機步驟的網頁說明:http://ihower.idv.tw/course/rails.html

README

2009年9月21日星期一

Page 24: Ruby on Rails : 簡介與入門

什麼是 Web framework?

• 開發動態網站、網站應用程式、網路服務的軟體框架

• 開天之初,從最早的 Perl CGI、PHP、ASP,進化到全功能的框架,支援 MVC、Database 操作、URL 路徑、Template 機制、Cookie 處理、快取、Ajax、安全性機制....等

• 採用 Framework 不重複開發輪子,並讓程式有一定的規範容易維護開發。程式碼如何組織,Framework 已經幫你想好了。

2009年9月21日星期一

Page 25: Ruby on Rails : 簡介與入門

什麼是 MVC?• 一種軟體架構的設計模式,將軟體分成三個部分:Model、Controller、View

• Model 物件包裝了資料與商業邏輯

• 例如操作資料庫

• View 表示使用者介面,顯示及編輯表單

• 可內嵌 Ruby 程式的 HTML

• Controller 負責將資料送進送出 Model

• 處理從外界(e.g. 瀏覽器)來的 Request,與 Model 互動後輸出 View (e.g. HTML)

2009年9月21日星期一

Page 26: Ruby on Rails : 簡介與入門

DB

Controller

View Model

1.

2.3.

4.

2009年9月21日星期一

Page 27: Ruby on Rails : 簡介與入門

DB

ActionController

ActionView ActiveRecord

1.2.

4.5.

Routing

3.

Rails 如何實現 MVC?

2009年9月21日星期一

Page 28: Ruby on Rails : 簡介與入門

為什麼使用 MVC?

• 分離商業邏輯和使用者介面,讓前端與後端開發者可以獨立作業

• 容易保持程式的不重複性(DRY: Don’t repeat yourself)

• 讓程式碼有著一致性的結構,位置清楚、容易維護。

2009年9月21日星期一

Page 29: Ruby on Rails : 簡介與入門

Ruby on Rails 運作需求

• Ruby 1.8.6 或 1.8.7

• Rubygems (Ruby 的套件管理工具)

• 資料庫:Rails 預設使用 SQLite 3,支援 MySQL、Postgres、Oracle、DB2、MSSQL 等

2009年9月21日星期一

Page 30: Ruby on Rails : 簡介與入門

開始一個 Rails 專案 Hello World! (live demo & 上機練習)

2009年9月21日星期一

Page 31: Ruby on Rails : 簡介與入門

預設的路徑(Routes)規則

http://localhost:3000/welcome/say

Controller Action

# /config/routes.rbmap.connect ':controller/:action/:id'map.connect ':controller/:action/:id.:format'

2009年9月21日星期一

Page 32: Ruby on Rails : 簡介與入門

加入一個 Model 操作資料庫

(live demo)

2009年9月21日星期一

Page 33: Ruby on Rails : 簡介與入門

什麼是 ORM ?• ActiveRecord 是 Rails 內建使用的 ORM 工具

• ORM: Object-Relational Mapping

• 將資料庫表格 (table) 對應到類別 (classe)

• 提供類別方法對表格操作• 將資料庫列 (row) 對應到 物件 (object)

• 提供物件方法對個別的資料做操作• 將資料庫欄位 (column) 對應到物件屬性 (object

attribute)

2009年9月21日星期一

Page 34: Ruby on Rails : 簡介與入門

透過 script/console 練習 ORM 操作 (上機練習)

2009年9月21日星期一

Page 35: Ruby on Rails : 簡介與入門

script/* 指令?

• script/about

• script/console

• script/generate

• script/server

• script/plugin

2009年9月21日星期一

Page 36: Ruby on Rails : 簡介與入門

什麼是 Rake?

• 類似於 Make 的 Ruby 工具

• 方便設定執行指令的相依性

於是就可以執行 rake my:foo_task

# lib/tasks/my_task.rakenamespace :my desc "task description" task :foo_task => :environment do puts “foobarrrr” endend

2009年9月21日星期一

Page 37: Ruby on Rails : 簡介與入門

有哪些內建的 Rake 指令?

• rake -T

• rake db:migrate

• rake db:drop

• rake tmp:clear

• rake notes

2009年9月21日星期一

Page 38: Ruby on Rails : 簡介與入門

DB Migration?• 使用 Ruby 語法定義資料庫結構 (Schema)

• 讓資料庫的修改也可以版本控制• e.g. 軟體從第三版更新到第五版,資料庫如何更新??

• 跨資料庫通用• e.g. SQLite3、MySQL、Postgres...etc

• 實務上,還在開發中的專案可以直接修改過往的 Migration,砍掉重練資料庫即可。

2009年9月21日星期一

Page 39: Ruby on Rails : 簡介與入門

Rails 的目錄架構• app

• controllers

• helpers

• models

• views

• config

• db

• doc

• lib

• log

• public

• script

• test

• tmp

• vendor

2009年9月21日星期一

Page 40: Ruby on Rails : 簡介與入門

Rails environments

• 預設有三種環境: development, production, test mode

• 設定不同的資料庫• 設定不同的 Log level、Session store,

custom library, Email setting 等

• 可自定 environment

2009年9月21日星期一

Page 41: Ruby on Rails : 簡介與入門

產生 controller 及 view 可以新增資料 (live demo & 上機練習)

2009年9月21日星期一

Page 42: Ruby on Rails : 簡介與入門

產生 controller 及 view 可以瀏覽資料 (live demo & 上機練習)

2009年9月21日星期一

Page 43: Ruby on Rails : 簡介與入門

產生 controller 及 view 可以編輯資料 (live demo & 上機練習)

2009年9月21日星期一

Page 44: Ruby on Rails : 簡介與入門

產生 controller 及 view 可以刪除資料 (live demo & 上機練習)

2009年9月21日星期一

Page 45: Ruby on Rails : 簡介與入門

什麼是 Helper ?• 可在 view template 中使用 helper method

• link_to

• form_for

• h (XSS攻擊不可不防)

• /app/helpers/* 可以自定你的 Helper

2009年9月21日星期一

Page 46: Ruby on Rails : 簡介與入門

建立 Layout (live demo & 上機練習)

• View 可以共用一個 Layout,作為 HTML 頭尾。

• 檔案預設是/app/views/layouts/application.html.erb

2009年9月21日星期一

Page 47: Ruby on Rails : 簡介與入門

flash hash (live demo & 上機練習)

• 內建的 flash hash 可以在 redirect 後跨 action 傳遞文字訊息

• 例如:成功建立、成功刪除等訊息

2009年9月21日星期一

Page 48: Ruby on Rails : 簡介與入門

DRY: Partial template(live demo & 上機練習)

• 將 View 中重複的程式抽出來

• 例如新增跟編輯的表單

2009年9月21日星期一

Page 49: Ruby on Rails : 簡介與入門

DRY: before_filter(live demo & 上機練習)

• 將 Controller 中重複的程式抽出來

• 例如依據 ID 找 Model 物件

2009年9月21日星期一

Page 50: Ruby on Rails : 簡介與入門

加入 Model Validation(live demo & 上機練習)

• 編輯 post.rb 加入 validates_presence_of :title

• 編輯 new.html.erb 及 edit.html.erb 加入 <%= error_messages_for :post %> helper

2009年9月21日星期一

Page 51: Ruby on Rails : 簡介與入門

Thank you.

參考資料:

Agile Web Development with Rails 3rd.RailsGuides http://guides.rubyonrails.org

2009年9月21日星期一