railsontrack創(chuàng)建開發(fā)和測(cè)試的數(shù)據(jù)庫(kù)。>mysql-urails-pEnterpassword:*****mysql>createdatabaseontrack_development;mysql>createdatabaseontrac" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

應(yīng)用Rails進(jìn)行REST 開發(fā)(二)

系統(tǒng) 1610 0

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

基于REST的rails 應(yīng)用可以使用新的腳手架(scaffold)命令 scaffold_resource 來方便的創(chuàng)建。可以傳遞給生成器這樣一些參數(shù):在本例中,就是資源的名字 “project”, 和 這個(gè)model 的字段名字以及類型。字段的類型是必須的,因?yàn)槲覀円褂胢igration,以及在視圖中顯示這些字段。
> cd ontrack
> ruby script/generate scaffold_resource project name:string desc:text


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

創(chuàng)建表:
> rake db:migrate

如果我們來看看剛才生成的ProjectController,會(huì)發(fā)現(xiàn)其實(shí)并沒有什么新鮮的東西,無非也就是這么一些操作:創(chuàng)建(create),讀取 (retrieve),更新(update),刪除(delete)這些操作。需要強(qiáng)調(diào)注意:這些操作都是針對(duì)Project這個(gè)資源的。 Controller 和 Action 看起來都很普通,但是仔細(xì)看一下,每個(gè)Action 都會(huì)有一些注釋,這些注釋表明了 url 和 http 所使用的動(dòng)作。這些注釋所體現(xiàn)的,就是 REST風(fēng)格的 URL。接下來的章節(jié),我們會(huì)仔細(xì)分析一下這些URL的內(nèi)容。


REST 風(fēng)格的 URL
REST風(fēng)格的URL,并不像以往的Rails 應(yīng)用一樣,是由 controller/action/model id 所組成的,例如 /projects/show/1 。相反,REST風(fēng)格的URL僅僅由 controller 和資源的id 所組成,例如/projects/1。
注意:我們一直再?gòu)?qiáng)調(diào)“資源”這個(gè)詞。URL中沒有了 action,我們也就看不到該對(duì)資源進(jìn)行什么操作了。
“/projects/1”這個(gè)URL到底應(yīng)該是顯示一個(gè)資源,還是應(yīng)該刪除一個(gè)資源?答案來自我們之前提到的 http 協(xié)議的4個(gè)動(dòng)作。

下面的列表可以展示 http 協(xié)議的4個(gè)動(dòng)作是如何和REST風(fēng)格的URL所關(guān)聯(lián)的,并且什么樣的組合,對(duì)應(yīng)什么樣的action:

我們可以看出來,除了 POST 動(dòng)作,其他三個(gè)URL都是相同的,原因很簡(jiǎn)單,因?yàn)橐獎(jiǎng)?chuàng)建的那個(gè)資源還不存在呢。既然有三個(gè)URL都是相同的,那該怎么區(qū)分呢?其實(shí)是 http 協(xié)議的4個(gè)動(dòng)作決定該調(diào)用哪個(gè)action。我們沒有使用action,這就使得 我們不會(huì)寫多余的 URL 和資源了。現(xiàn)在我們只需要2個(gè)URL: /projects/1 和 /projects ,如果是傳統(tǒng)的方式,我們需要 /projects/new , /projects/show/1 , /projects/delete/1,/projects/update/1 4個(gè)URL.

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


在Action 中使用 respond_to
我們已經(jīng)知道,我們可以通過一個(gè) 指定資源id的URL 和http協(xié)議的動(dòng)作的組合,來調(diào)用一個(gè) action。這使得一個(gè)URL看起來非常簡(jiǎn)潔:一個(gè)URL就指定了哪個(gè)資源要被操作,而不像以往那樣去指定一個(gè)Action。

那么到底有什么樣的需求,會(huì)讓我們?nèi)ナ褂眠@種風(fēng)格的URL呢?一個(gè) REST的action可以應(yīng)付不同的客戶端所需要的不同的信息格式。對(duì)于一個(gè)WEB迎來說,典型的客戶端當(dāng)然就是瀏覽器了,但是別忘了,對(duì)于一個(gè)web service 來說,它需要的則是 xml 格式的信息;對(duì)于一個(gè)RSS閱讀器來說,它需要的則是 RSS格式的信息。對(duì)于客戶端的請(qǐng)求,我們已經(jīng)使用 scaffold 生成器生成了 CRUD 4個(gè)方法來處理。下面的代碼片斷展示了 “show” 這個(gè) 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)技術(shù),在這個(gè)例子中,代碼塊(block)部分處理了2種格式的信息:html 和 xml。針對(duì)客戶端不同的請(qǐng)求,會(huì)執(zhí)行代碼塊(block)中不同的部分。例如如果客戶端請(qǐng)求的是html 信息,那么會(huì)執(zhí)行“format.html”,如果客戶端請(qǐng)求的是xml 信息,那么會(huì)執(zhí)行“format.xml”部分。

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

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

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

應(yīng)用Rails進(jìn)行REST 開發(fā)(二)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美在线一区二区三区 | 久久天天拍天天爱天天躁 | 欧美精品在线不卡 | 超碰人人在线 | 久久久久久久成人 | 色婷婷久久久久swag精品 | 欧美日韩中文 | 亚洲第一视频 | 污视频免费网站 | 精品伊人网 | 国产精品久久久久久久久久久久 | 国产成人免费 | 亚洲热视频 | 精品国产免费一区二区三区 | 亚洲国产香蕉视频欧美 | 国产免费观看视频 | 日韩免费毛片 | 久久香蕉网| 日本中文字幕一区二区有码在线 | 無码一区中文字幕少妇熟女H | 加勒比 テカ痴女の猛烈交尾 | 久久影院一区二区三区 | 成人毛片网站 | www干| 麻豆AV蜜桃AV久久 | 嫩草影院在线观看网站成人 | 美日韩一区二区 | 99伊人| 欧美精品videosex极品 | 国产网站在线 | 日韩欧美小视频 | 亚洲黄色免费观看 | 一区二区三区国产好 | 免费欧美黄色网址 | 亚洲第一人伊人色综合 | 特黄特色大片免费视频大全 | 国内精品一区二区 | 日日操日日干 | 天天爽天天草 | 色六月婷婷 | 亚洲欧洲日韩国产aa色大片 |