2017-07-27 41 views
0

我想通過面向對象編程的鏡頭深入瞭解Rails。應用程序控制器有哪些屬性和方法?

當構建一個基本的應用程序時,模型的屬性和方法看起來更加明顯和可視化,因爲開發人員定義了像find和all這樣的常用屬性和方法。

但我不確定控制器具有什麼屬性和方法,以及使用什麼和使用什麼。

我想過使用.method方法來查看應用程序控制器有什麼方法,但我無法弄清楚在控制檯中輸入什麼對象槽。底線是我知道一個控制器在理論上做了什麼,但是當談到實際的源代碼時,不知道代碼的哪一部分代表一個ApplicationController。

什麼樣的方法和屬性用於說一個簡單的CRUD應用程序,如博客?

+0

那麼,簡短的回答是......相當多!這是一個很難回答的問題。我會建議[從這裏開始](http://www.rubypigeon.com/posts/examining-internals-of-rails-request-response-cycle/)瞭解所有部分如何配合在一起的概述。 –

+0

@AdamLassek感謝您的鏈接!我想知道什麼屬性和方法正在用於像博客這樣的簡單CRUD應用程序。 – Robert

回答

1

在標準軌道應用中,所有的應用程序的控制器從ApplicationControllerActionController::Base,其含有類和方法定義用於處理從客戶端(Web瀏覽器,機器人,移動設備進入應用程序的基本代碼的HTTP請求繼承繼承等),提取請求參數,處理數據並按照請求以適當格式(XML,HTML,JSON等)將響應返回給客戶端。

因此,從OOP的角度來看,ApplicationController服務於所有應用程序控制器層次結構的頂部。因此,應用程序的每個部分都需要使用大多數通用過濾器/掛鉤,例如:處理驗證,授權等,因爲這是HTTP請求在委派給指定控制器之前在您的應用程序中遇到的第一個地方。

ApplicationController當存在來自客戶端的HTTP請求時,實例化對象。例如,如果您有application_controller.rb動作test與routes.rb中進入get '/test' => 'application#test'

class ApplicationController < ActionController::Base 

    def test 
    puts "Instance: #{self}" 
    puts "Instance Methods: #{self.methods}" 
    end 

end 

你可以開始你的本地服務器,並參觀http://localhost:3000/test並檢查您的服務器日誌來檢查ApplicationController對象和它的方法。

對於詳細的檢查,我會建議增加gem 'pry'Gemfile和捆綁,然後在ApplicationController#test行動,這可以讓你進一步檢查您的運行時服務器上的對象使用binding.pry

1

ApplicationController在Rails中是您的應用程序所獨有的,但它繼承自另一個類ActionController:: Base。我猜你想知道這個特定類的公開方法。

總結http://api.rubyonrails.org/classes/ActionController/Base.html

的的ActionController :: Base類負責所有的Web請求,並執行傳遞請求,並從軌道路線的工作。這使得像可用的方法:

  • request
  • params(使發送到可用的服務器到你的動作參數)(提出的Web請求被用來解釋調用哪一個控制器動作的全對象) ,session(維護您的會話變量)等

因爲,Rails的需要創建實例,並調用您的適當的方法(或控制器行動)的責任,你從來沒有真正要與控制器類代碼交互您可以使用Mode的方式升班。

欲瞭解更多信息,您可以隨時在Rails的GitHub倉庫中打開文件,並瞭解Rails的工作方式。好有趣!

相關問題