2011-09-15 31 views
1

我的問題很簡單:在一個平均複雜的Web請求中,通常我們在請求參數方面有相當多的信息。在許多情況下,其中一些參數是控制器操作甚至不應該感興趣的,例如referrer_id(出於分析目的)(如果請求來自點擊第三方網站上的鏈接或來自電子郵件通訊新手:過濾器是否是根據請求參數修改響應數據的正確位置?

又如:在Quora上,如果您輸入以下網址: http://www.quora.com/As-a-mobile-apps-developer-on-what-platform-should-I-choose-to-develop-and-why 你會被引導到正常的網頁,但是,如果你輸入相同的URL,但與(snids = 24082824)的參數最後,你會得到頁面內容,以及一些額外的覆蓋內容(在這種情況下,有關誰最後編輯問題的信息)

我認爲這將是愚蠢的檢查每個請求的存在和值控制器操作中的參數。如果是其他的話,那麼這個行動就會成爲一種行爲。

過濾器似乎是一個更好的選擇,可以將請求中的所有不同元素分開並解耦,對嗎?使用過濾器,一次可以在幾秒鐘內完全改變工作流程,而不會破壞和控制控制器操作。控制器動作可以根據請求的url模式獲取一個視圖,但是如果有更多的參數,則過濾器有責任修改請求/響應,攔截,記錄,甚至覆蓋控制器動作請求,對嗎?

回答

1

是的過濾器是正確的路要走。

2

只是一個小紙條,我不會使用過濾器來修改請求和響應。有可能這些對象可用於過濾器。使用過濾器來完成保持動作乾淨的小時間事情,或者強制執行特定於應用程序的訪問控制,這聽起來不錯。但如果它關於修改請求和響應,那麼我更喜歡定製的Rack中間件。畢竟每個rails應用程序都是一個機架應用程序。

+0

看,這是我對Rails的體驗結束的地方。我是一個完整的noob,所以我想我將不得不在Rack上進行更多的研究。感謝您指出了這一點。 – user802232

+0

對於像重定向這樣的事情,取決於用戶是新的還是未登錄過濾器都沒有問題,但對於一些嚴重的請求篡改,我認爲機架中間件是要走的路。檢查過濾器上的一些東西http://rails.nuvvo.com/lesson/6373-action-controller-filters – sunkencity

+0

我發現,圍繞用戶(即應用程序邏輯)的大多數事情,機架中間件有點太低級和解決方案變得太複雜。但對於其他方面來說,這很好。我用它爲不同的域名動態地提供不同的內容。這裏有一個參考http://asciicasts.com/episodes/151-rack-middleware – sunkencity

相關問題