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

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

應用Rails進行REST 開發(二)

系統 1540 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 來方便的創建??梢詡鬟f給生成器這樣一些參數:在本例中,就是資源的名字 “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 和資源了?,F在我們只需要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條評論
主站蜘蛛池模板: 国产精品欧美一区二区三区不卡 | 亚洲人成网站999久久久综合 | 国产成人18黄禁网站免费观看 | 国产精品2020观看久久 | 精品视频一区二区三区免费 | 亚洲欧美日韩不卡一区二区三区 | 99精品在免费线视频 | 日韩视频一区二区在线观看 | 国产免费一区二区在线看 | 久久亚洲福利 | 大ji吧快给我别停受不了视频 | 久久久无码精品亚洲日韩按摩 | 精品一区二区视频在线观看 | 亚洲免费视频一区二区三区 | 精精国产www视频在线观看免费 | 欧美骚视频 | 国产精品视频一区国模私拍 | 99r在线视频| 久久综合视频网 | 羞羞视频在线看 | 日本黄 色 成 年 人免费观看 | 成人一级片 | 国产精品亚洲玖玖玖在线靠爱 | 波多野结衣一区二区在线 | 欧美精品 日韩 | 色就操 | 国产激情在线视频 | 91久久国产成人免费观看资源 | 亚洲精品一区二区三区不卡 | 国产欧美一区二区精品性色 | 国产伦精品一区二区三区四区 | 亚洲精品国产综合一线久久 | 99久久综合狠狠综合久久一区 | 免费成人毛片 | 五月天婷五月天综合网在线 | www.精品视频| 美女视频91 | 亚洲欧洲综合网 | 久久精品国产欧美 | 国产精品免费大片 | 亚洲国产欧洲精品路线久久 |