紅寶石在軌道上的應(yīng)用流程
01
的07
Rails應(yīng)用程序流程
當(dāng)您'從頭到尾重新編寫自己的程序時(shí),它很容易看到流量控制。程序從這里開始,有'一個(gè)循環(huán),方法調(diào)用在這里,它'全部可見。但在Rails應(yīng)用程序中,事情并不那么簡(jiǎn)單。使用任何類型的框架,您放棄對(duì)諸如"flow"之類的事物的控制,以支持更快或更簡(jiǎn)單的方式來執(zhí)行復(fù)雜的任務(wù)。在Ruby on Rails的情況下,流量控制都是在后臺(tái)處理的,所有這些都是(或多或少)模型,視圖和控制器的集合。
02
of 07
HTTP
任何web應(yīng)用程序的核心都是HTTP。HTTP是您的web瀏覽器用于與web服務(wù)器交談的網(wǎng)絡(luò)協(xié)議。這就是像"request,""GET"and"POST"come from,they're這個(gè)協(xié)議的基本詞匯。然而,由于Rails是對(duì)此的抽象,我們贏得了'花了很多時(shí)間談?wù)撍?/p>
打開網(wǎng)頁(yè)時(shí),單擊鏈接或在web瀏覽器中提交表單,瀏覽器將通過TCP/IP連接到web服務(wù)器。然后瀏覽器發(fā)送服務(wù)器a"請(qǐng)求,"將其想象成瀏覽器填寫特定頁(yè)面上請(qǐng)求信息的形式的郵件。服務(wù)器最終將web瀏覽器發(fā)送為"響應(yīng)。"Ruby on Rails不是web服務(wù)器但是,web服務(wù)器可以是Webrick的任何內(nèi)容(從命令行啟動(dòng)Rails服務(wù)器時(shí)通常會(huì)發(fā)生什么)到Apache HTTPD(為大部分web供電的web服務(wù)器)。web服務(wù)器只是一個(gè)促進(jìn)者,它將請(qǐng)求并將其交給您的Rails應(yīng)用程序,該應(yīng)用程序生成響應(yīng)并傳遞回服務(wù)器,服務(wù)器又將其發(fā)送回客戶端。所以到目前為止的流程是:
客戶端->服務(wù)器->[Rails]>服務(wù)器->客戶端
但是"軌道"是我們真正感興趣的,讓我們深入研究。
03
of 07
打印機(jī)
Rails應(yīng)用程序?qū)φ?qǐng)求所做的第一件事就是將其通過交換機(jī)發(fā)送。每個(gè)請(qǐng)求都有一個(gè)URL,這是顯示在web瀏覽器地址欄中的內(nèi)容。如果URL有意義并且URL包含任何參數(shù),則路由程序決定了該URL要執(zhí)行的操作。打印機(jī)配置為配置/路線。
首先,要知道Android的最終目標(biāo)是將URL與控制器和操作相匹配(稍后將詳細(xì)介紹)。由于大多數(shù)Rails應(yīng)用程序都是RESTful的,RESTful應(yīng)用程序中的內(nèi)容使用資源表示,因此您可以看到典型Rails應(yīng)用程序中的resources:posts等行。這與帖子控制器匹配像/帖子/7/編輯的URL,帖子上的編輯操作,ID為7。打印機(jī)只是決定請(qǐng)求去哪里。所以我們的[Rails]塊可以擴(kuò)展一點(diǎn)。
打印機(jī)->[Rails]
04
of 07
控制器
現(xiàn)在打印機(jī)已經(jīng)決定將請(qǐng)求發(fā)送到哪個(gè)控制器,以及該控制器上的哪個(gè)操作,它會(huì)發(fā)送它??刂破魇且唤M相關(guān)動(dòng)作,它們都捆綁在一個(gè)類中。例如,在博客中,查看,創(chuàng)建,更新和刪除博客帖子的所有代碼都捆綁在名為"帖子"的控制器中;這些操作只是本課程的正常方法??刂破魑挥?strong>app/Controllers。
所以讓'說網(wǎng)絡(luò)瀏覽器發(fā)送了/帖子/42的請(qǐng)求。打印機(jī)決定這是指Post控制器,show方法and要顯示的帖子的ID是42,因此它使用此參數(shù)調(diào)用show方法。show方法不負(fù)責(zé)使用模型檢索數(shù)據(jù)并使用視圖創(chuàng)建輸出。所以我們擴(kuò)展的[Rails]塊現(xiàn)在是:
打印機(jī)->控制器#操作
05
of 07
模型
該模型既是最容易理解的模型,也是最難實(shí)現(xiàn)的模型。該模型負(fù)責(zé)與數(shù)據(jù)庫(kù)交互。解釋它的最簡(jiǎn)單方法是模型是一組簡(jiǎn)單的方法調(diào)用,它們返回處理數(shù)據(jù)庫(kù)中所有交互(讀取和寫入)的普通紅寶石對(duì)象。因此,在博客示例之后,控制器將用于使用模型檢索數(shù)據(jù)的API看起來像發(fā)現(xiàn)(params[:id])。參數(shù)是從URL,Post解析的Android模型。這會(huì)產(chǎn)生SQL查詢,或者需要做任何事情來檢索博客文章。模型位于app/Models。
重要的是要注意并非所有操作都需要使用模型。僅當(dāng)需要從數(shù)據(jù)庫(kù)加載數(shù)據(jù)或保存到數(shù)據(jù)庫(kù)時(shí)才需要與模型交互。因此,我們?cè)谖覀兊男×鞒虉D中在其后面加上問號(hào)。
Router->Controller#action->型號(hào)?
06
of 07
視圖
最后,開始生成一些HTML的時(shí)間。HTML不由控制器本身處理,也不由模型處理。使用MVC框架的要點(diǎn)是劃分一切。數(shù)據(jù)庫(kù)操作保持在模式下,HTML生成保持在視圖中,控制器(由打印機(jī)調(diào)用)同時(shí)調(diào)用它們。
HTML通常使用嵌入式Ruby生成。如果您'熟悉PHP,也就是說帶有PHP-cod的HTML文件嵌入其中,然后嵌入式紅寶石將非常熟悉。這些視圖位于app/views中,控制器將調(diào)用其中一個(gè)來生成輸出并將其發(fā)送回web服務(wù)器。控制器使用模型檢索的任何數(shù)據(jù)通常都將存儲(chǔ)在實(shí)例變量中,由于某些Ruby magic,該實(shí)例變量將作為視圖中的實(shí)例變量提供。此外,嵌入式Ruby不需要生成HTML,它可以生成任何類型的文本。您'在為RSS,JSON等生成XML時(shí)會(huì)看到這一點(diǎn)。
該輸出被發(fā)送回web服務(wù)器,然后將其發(fā)送回web瀏覽器,從而完成該過程。
07理賠小知識(shí)
of 07
完整圖片
而這個(gè)'這是一個(gè)請(qǐng)求Ruby on Rails web應(yīng)用程序的完整生命周期。
- Web瀏覽器-瀏覽器在單擊鏈接時(shí)通常代表用戶提出請(qǐng)求。
- Web服務(wù)器-Web服務(wù)器接受請(qǐng)求并將其發(fā)送到Rails應(yīng)用程序。
- 打印機(jī)-打印機(jī),Rails應(yīng)用程序的第一部分,用于查看請(qǐng)求,解析請(qǐng)求并確定它應(yīng)該調(diào)用哪個(gè)控制器/動(dòng)作對(duì)。
- controller-控制器被調(diào)用??刂破?s作業(yè)是使用模型檢索數(shù)據(jù)并將其發(fā)送到視圖。
- 模型-如果需要檢索任何數(shù)據(jù),則使用該模型從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)。
- 查看-數(shù)據(jù)被發(fā)送到視圖,在該視圖中生成HTML輸出。
- Web服務(wù)器-生成的HTML被發(fā)送回服務(wù)器,Rails現(xiàn)在完成了請(qǐng)求。
- Web瀏覽器-服務(wù)器將數(shù)據(jù)發(fā)送回Web瀏覽器,并顯示結(jié)果。