Ruby on Rails:控制器纵览
生活随笔
收集整理的這篇文章主要介紹了
Ruby on Rails:控制器纵览
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在一個基于MVC的Web應用程序中,應用程序邏輯以及數據的存取是由MVC中的C,也就是控制器來完成的。因此,深刻地理解MVC框架所提供控制器對于開發一個高效、可升級、穩定的應用程序是十分必要的。RoR也不例外。
RoR中所提供的控制器叫動作控制器(ActionController)。本文將主要討論動作控制器所提供的幾種服務,以及如何使用動作控制器。
什么是動作控制器
在RoR中,動作包(Action Pack)是這個框架的核心。它包括兩部分,動作視圖和動作控制器。動作包的一個特點是除了Web程序,不能使用在其它類型的程序中。下面讓我們看看在我們通過瀏覽器鍵入一個URL后,如http://localhost:3000/demo/say/hello,都發生了什么。下面是在RoR中處理動作的步驟:
1. RoR首先裝載了位于app/controllers目錄中的say_controller.rb文件。這個文件只被裝載一次。
??? 2. 然后 RoR建立了類SayController的實例。
3. 一旦SayController類被實例化,RoR就會在app/helpers中查找say_helper.rb文件。如果這個文件存在,它就會被裝載,并且這個文件將會和SayController對象混合。這就意味著在SayController對象中可以直接訪問SayHelper中的方法。
4. 最后在app/models中查找say.rb文件,如果存在,裝載它。
到現在為止,我們已經對應用程序的初始化過程非常清楚了,接下來讓我們繼續看看動作控制器所提供的服務。下面是RoR所提供的服務列表:
1. URL映射
2. 會話跟蹤
3. 過濾和驗證
4. 緩沖
現在又帶來一個問題。這些服務為什么由控制器來提供。當然,答案也很簡單,這是因為控制器介于數據和應用程序之間,因此,它可以監視數據的存取,并且可以根據需要對URL進行映射。因此,這些服務理所當然由控制器來提供。下面我們將詳細討論控制器提供的這些服務。
1. URL映射
當我們在瀏覽器中輸入http://localhost:3000/admin/show時,會顯示相應的內容。但你也許會有疑問,RoR是如何將URL鏈接映射成相應的類或方法呢?事實上,這些映射的代碼都被寫在了config目錄中的routers.rb中。下面是這個文件的部分代碼。
動作控制器通過它的映射組件將來自外部請求的URL和內部的應用程序連接了起來。上述代碼的第3行就是完成這個功能的。在這行語句中,map.connect的連接字符串是":controller/:action/:id"。請求的URL只有匹配這個字符串才能被接受。對于一個URL請求來說,它可以被RoR分成三部分:
a. 第一部分是模式字符串中的:controller部分。
b. 第二部分是模式字符串中的:action部分。
c. 第三部分是模式字符串中的:id部分。
根據上面所描述的三部分,URL:http://localhost:3000/demo/admin/show/1/將被映射成以下三部分:
根據以上的三部分,RoR將調用admin控制器的show方法,并將參數1傳到show方法中。因此,我們可以看出,RoR在其中做了很多本應該由我們做的事件。因此,RoR是一項十分強大技術。
RoR中所提供的控制器叫動作控制器(ActionController)。本文將主要討論動作控制器所提供的幾種服務,以及如何使用動作控制器。
什么是動作控制器
在RoR中,動作包(Action Pack)是這個框架的核心。它包括兩部分,動作視圖和動作控制器。動作包的一個特點是除了Web程序,不能使用在其它類型的程序中。下面讓我們看看在我們通過瀏覽器鍵入一個URL后,如http://localhost:3000/demo/say/hello,都發生了什么。下面是在RoR中處理動作的步驟:
1. RoR首先裝載了位于app/controllers目錄中的say_controller.rb文件。這個文件只被裝載一次。
??? 2. 然后 RoR建立了類SayController的實例。
3. 一旦SayController類被實例化,RoR就會在app/helpers中查找say_helper.rb文件。如果這個文件存在,它就會被裝載,并且這個文件將會和SayController對象混合。這就意味著在SayController對象中可以直接訪問SayHelper中的方法。
4. 最后在app/models中查找say.rb文件,如果存在,裝載它。
到現在為止,我們已經對應用程序的初始化過程非常清楚了,接下來讓我們繼續看看動作控制器所提供的服務。下面是RoR所提供的服務列表:
1. URL映射
2. 會話跟蹤
3. 過濾和驗證
4. 緩沖
現在又帶來一個問題。這些服務為什么由控制器來提供。當然,答案也很簡單,這是因為控制器介于數據和應用程序之間,因此,它可以監視數據的存取,并且可以根據需要對URL進行映射。因此,這些服務理所當然由控制器來提供。下面我們將詳細討論控制器提供的這些服務。
1. URL映射
當我們在瀏覽器中輸入http://localhost:3000/admin/show時,會顯示相應的內容。但你也許會有疑問,RoR是如何將URL鏈接映射成相應的類或方法呢?事實上,這些映射的代碼都被寫在了config目錄中的routers.rb中。下面是這個文件的部分代碼。
| ActionController::Routing::Routes.drawdo|map| map.connect ':controller/service.wsdl', :action => 'wsdl' map.connect ':controller/:action/:id' end |
動作控制器通過它的映射組件將來自外部請求的URL和內部的應用程序連接了起來。上述代碼的第3行就是完成這個功能的。在這行語句中,map.connect的連接字符串是":controller/:action/:id"。請求的URL只有匹配這個字符串才能被接受。對于一個URL請求來說,它可以被RoR分成三部分:
a. 第一部分是模式字符串中的:controller部分。
b. 第二部分是模式字符串中的:action部分。
c. 第三部分是模式字符串中的:id部分。
根據上面所描述的三部分,URL:http://localhost:3000/demo/admin/show/1/將被映射成以下三部分:
| :controller : 'admin', :action :'show', :id :1 |
根據以上的三部分,RoR將調用admin控制器的show方法,并將參數1傳到show方法中。因此,我們可以看出,RoR在其中做了很多本應該由我們做的事件。因此,RoR是一項十分強大技術。
轉載于:https://www.cnblogs.com/xiaoman_890/archive/2009/05/04/1448949.html
總結
以上是生活随笔為你收集整理的Ruby on Rails:控制器纵览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个让我魂牵梦萦的地方——婺源
- 下一篇: pr怎么在画面上加字?(正常人怎么在一年