2013-01-24 55 views
4

我們目前正在爲ROR 3.2開發自定義cms引擎。在這個過程中,有幾個類的類型來源於我們想要成爲我們的Rails應用程序中的第一類公民,這意味着它們應該位於應用程序的應用程序文件夾下,並且它是插件。從應用中的自定義文件夾中的名稱空間自動加載

目前我們有以下幾種類型:

  • 數據源
  • 數據類型
  • 查看

我創建的應用程序文件夾下multible目錄來容納這些:

  • app/data_source
  • 應用程序/ DATA_TYPE
  • 應用程序/視圖

更多類型將會跟進,我用這麼多的目錄污染app文件夾有點擔心。因此,我想將它們移動到保存由cms定義的所有類型的子目錄/模塊中。

所有類應該是內部的MyCms命名空間和目錄結構應該是這樣的:

  • 應用程序/ my_cms/DATA_SOURCE
  • 應用程序/ my_cms/DATA_TYPE
  • 應用程序/ my_cms /圖

但是現在我遇到了自動加載的問題,因爲rails默認的自動加載將會忽略這樣的路徑:

  • 應用程序/ DATA_SOURCE/my_cms
  • 應用程序/ DATA_TYPE/my_cms
  • 應用程序/視圖/ my_cms

但這種方式在一個目錄下我也不會分組的所有對象類型。

我想要的有點類似於孤立引擎的視圖分組。例如,在Devise中,所有視圖都分組在views/devise子目錄中。

任何想法如何實現而不需要太多的自定義實現?

回答

8

你將不得不配置/ application.rb中內應用程序/ my_cms添加到您的自動加載路徑:

config.autoload_paths << "#{config.root}/app/my_cms" 

前提是你的類沒有這樣的命名空間中定義:

class DataSource 
    ... 
end 

如果你在app/my_cms/data_source中像這樣命名它們。RB:

class MyCms::DataSource 
    ... 
end 

您可以添加應用程序文件夾到負載路徑:

config.autoload_paths << "#{config.root}/app" 

或者,您也可以手動做,但你失去了在Rails開發這些類的重載:

在應用程序/ my_cms.rb(並自動加載應用程序的地方):

module MyCms 
    autoload :AnotherDataSource, 'my_cms/data_source/one_data_source' 
    autoload :AnotherDataSource, 'my_cms/data_source/another_data_source' 

    ... 
end 
+0

如果我想他們bo命名空間?命名空間會帶來這樣的優勢,即來自cms的所有內容都將被封裝。另外,IDE中的自動完成功能會大大增強,因爲我可以輸入MyCms ::,執行自動完成功能並查看所有重要的類。 – room13

+0

更新了答案。 – moritz

+0

Thanxs。這已經很不錯了,但是還有什麼是子目錄。這意味着數據源不在data_source文件夾下面...... – room13

相關問題