2009-07-24 36 views
8

我想在我的Rails應用程序中的幾個控制器之間共享與視圖無關的代碼。我應該在哪裏放置目錄結構?哪裏可以找到不是模型,視圖,控制器或助手的Rails代碼?

編輯:有問題的代碼,如果所有的東西控制器使用,以確定如何他們渲染模型數據

+0

它與數據庫實體無關,因此(不是模型代碼) – 2009-07-24 14:20:56

+1

模型不需要與數據庫相關。它們只是表示系統使用的數據,無論它是否存儲。 – Pesto 2009-07-24 14:23:15

+0

這是什麼?你只說明它不是什麼,但不是它是什麼。 – txwikinger 2009-07-24 14:28:12

回答

8

如果代碼是一樣的東西,在這些實用方法模塊可放置在lib文件夾中。或者,如果它們共享行爲,則可以爲您的一些控制器創建一個通用超類。

請發表您正在考慮的代碼類型的示例。

0

就我個人而言,我認爲它很好,如果它的控制器涉及把它放在你的控制器目錄中,但標記爲模塊,例如app/controllers/what_am_i_module.rb,因爲它是特定於開發中的應用程序。

對於我來說,lib看起來像是一個地方,我會將框架/核心增強或猴子補丁放到應用程序中。

5

如果它是「所有控制器都使用的東西」,我會把它放在所有控制器使用的基類中。想起「application_controller」。

+0

+1聽起來像application_controller.rb也是。 – cakeforcerberus 2009-07-24 15:47:07

2

我一直在lib中創建模塊以向其他類提供代碼。

下面是一個縮寫示例模塊,它定義了可以從不同控制器實例化的視圖的值。

module ControllerDefaultValues 
    def default_value_for_some_controller() 
    @controller_name = "some_controller" 
    end 
end 

要使用此功能,只需在你的類模塊:

class SearchesController 
    include ControllerDefaultValues 
    # 
    def search_some_controller 
    default_value_for_some_controller() 
    render(:partial => "search_results") 
    end 
end 

這種方法的主要好處是它讓專注於控制器的控制器目錄和你的車型目錄專注於邏輯。

0

如果它要由所有的控制器使用,堅持在application_controller.rb

你所有的控制器都是從ApplicationController繼承,所以他們都會訪問它們。

相關問題