railsontrack創建開發和測試的數據庫。>mysql-urails-pEnterpassword:*****mysql>createdatabaseontrack_development;mysql>createdatabaseontrac" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

應用Rails進行REST 開發(二)

系統 1767 0

實例應用
??? 我們以《RapidWeb Development mit Ruby on Rails》中的一個例子“項目管理應用”來描述Rails的REST方面的特性。
??? 首先創建一個rails的應用:(原書中的rails為1.2)
> rails ontrack
??? 創建 開發 和 測試 的數據庫。
> mysql -u rails -p
Enter password: *****
mysql> create database ontrack_development;
mysql> create database ontrack_test;
mysql> quit

基于REST的rails 應用可以使用新的腳手架(scaffold)命令 scaffold_resource 來方便的創建。可以傳遞給生成器這樣一些參數:在本例中,就是資源的名字 “project”, 和 這個model 的字段名字以及類型。字段的類型是必須的,因為我們要使用migration,以及在視圖中顯示這些字段。
> cd ontrack
> ruby script/generate scaffold_resource project name:string desc:text


生成器不僅生成了 model, controller, view, 還生成了完整的migration腳本,以及在 routes.rb 里生成了一個映射:map.resources :projects ,對于新生成controller來說,這是用于REST方面的最后一個映射項目。

創建表:
> rake db:migrate

如果我們來看看剛才生成的ProjectController,會發現其實并沒有什么新鮮的東西,無非也就是這么一些操作:創建(create),讀取 (retrieve),更新(update),刪除(delete)這些操作。需要強調注意:這些操作都是針對Project這個資源的。 Controller 和 Action 看起來都很普通,但是仔細看一下,每個Action 都會有一些注釋,這些注釋表明了 url 和 http 所使用的動作。這些注釋所體現的,就是 REST風格的 URL。接下來的章節,我們會仔細分析一下這些URL的內容。


REST 風格的 URL
REST風格的URL,并不像以往的Rails 應用一樣,是由 controller/action/model id 所組成的,例如 /projects/show/1 。相反,REST風格的URL僅僅由 controller 和資源的id 所組成,例如/projects/1。
注意:我們一直再強調“資源”這個詞。URL中沒有了 action,我們也就看不到該對資源進行什么操作了。
“/projects/1”這個URL到底應該是顯示一個資源,還是應該刪除一個資源?答案來自我們之前提到的 http 協議的4個動作。

下面的列表可以展示 http 協議的4個動作是如何和REST風格的URL所關聯的,并且什么樣的組合,對應什么樣的action:

我們可以看出來,除了 POST 動作,其他三個URL都是相同的,原因很簡單,因為要創建的那個資源還不存在呢。既然有三個URL都是相同的,那該怎么區分呢?其實是 http 協議的4個動作決定該調用哪個action。我們沒有使用action,這就使得 我們不會寫多余的 URL 和資源了。現在我們只需要2個URL: /projects/1 和 /projects ,如果是傳統的方式,我們需要 /projects/new , /projects/show/1 , /projects/delete/1,/projects/update/1 4個URL.

有一點需要注意,之前我們也提到過,瀏覽器只能理解 POST 和 Get 兩個動作,所以,當輸入 http://localhost:3000/projects/1 的時候,會調用 show這個Action.所以,Rails 提供了一個輔助的方案來聲稱一個用于刪除一個資源的鏈接:Delete 這個動作被放在一個隱藏的提交字段里(hidden field)提交給服務器;在創建新的資源的時候,也是適用相同的方法。這些內容都會在以下的章節里介紹。


在Action 中使用 respond_to
我們已經知道,我們可以通過一個 指定資源id的URL 和http協議的動作的組合,來調用一個 action。這使得一個URL看起來非常簡潔:一個URL就指定了哪個資源要被操作,而不像以往那樣去指定一個Action。

那么到底有什么樣的需求,會讓我們去使用這種風格的URL呢?一個 REST的action可以應付不同的客戶端所需要的不同的信息格式。對于一個WEB迎來說,典型的客戶端當然就是瀏覽器了,但是別忘了,對于一個web service 來說,它需要的則是 xml 格式的信息;對于一個RSS閱讀器來說,它需要的則是 RSS格式的信息。對于客戶端的請求,我們已經使用 scaffold 生成器生成了 CRUD 4個方法來處理。下面的代碼片斷展示了 “show” 這個 action 中 respond_to 的使用方法:
Listing 1.2: ontrack/app/controllers/projects controller.rb
??? # GET /projects/1
??? # GET /projects/1.xml
??? def show
??? ??? @project = Project.find(params[:id])
??? ??? respond_to do |format|
??? ??? format.html # show.rhtml
??? ??? format.xml { render :xml => @project.to_xml }
??? ??? end
??? end
respond_to 方法是用了代碼塊(block)技術,在這個例子中,代碼塊(block)部分處理了2種格式的信息:html 和 xml。針對客戶端不同的請求,會執行代碼塊(block)中不同的部分。例如如果客戶端請求的是html 信息,那么會執行“format.html”,如果客戶端請求的是xml 信息,那么會執行“format.xml”部分。

如果 format.html 代碼塊里是空的,那么默認就顯示 show.rhtml。
控制 respond_to 可以通過2種方式:一是在 http-header 里面;二是在URL后面追加一些東西,也就是改變URL的樣式。

改變URL的樣式
第二種控制 action 返回不同格式的信息的方法,就是改變URL的樣式。假設我們沒有刪除 id=1 這個資源project,那么我們通過以下這個方式來在瀏覽器里顯示這個資源:http://localhost:3000/projects/1.xml
這里MAC的用戶要注意,這種情況下 firefox 表現的不錯,但是Safari就差些,因為Safari 會忽略xml 格式的信息。甚至 firefox 會把xml 顯示的非常漂亮!到這里,我們已經知道一個controller 和 URL是如何工作的,在接下來的2個章節里,我們會學習如何在 controller 和 view 里使用和構造這種REST風格的URL。

好了,今天我們就介紹到這里,到現在為止都還是理論上的東西,下節將開始說view、controller中的rest風格。

應用Rails進行REST 開發(二)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 萨嘎县| 河北区| 普定县| 东乡县| 漳州市| 焉耆| 乐清市| 屯留县| 万年县| 石河子市| 阿拉善右旗| 阿坝县| 新乡市| 神池县| 龙口市| 军事| 仲巴县| 塘沽区| 宁河县| 萍乡市| 拜城县| 齐齐哈尔市| 曲阳县| 农安县| 宁远县| 达州市| 拜城县| 玉溪市| 金昌市| 廉江市| 保山市| 安远县| 达拉特旗| 航空| 鲁甸县| 分宜县| 吉隆县| 朔州市| 浦县| 辉南县| 郓城县|