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