2011-01-07 34 views
31

我在我的rails應用程序中有超過100個模型,並且只是爲了組織,我將它們分爲多個文件夾,所有文件夾仍然位於主模型文件夾下,以便更輕鬆地導航項目並查看相關文件。把模型分成目錄是不是一個好主意?

這是一個壞主意嗎?什麼是軌道的方式來做到這一點?

+0

超過100款?這是一個大項目嗎? – 2011-01-07 04:47:41

回答

62

不,這不是一個壞主意。許多人都這樣做,我無法在大型應用程序中生存。

有這樣做的方法有兩種:

首先是隻動車型。但是,您將不得不告訴Rails加載任意模型(因爲它不知道它們在哪裏)。像這樣的應該做的伎倆:

# In config/application.rb 
module YourApp 
    class Application < Rails::Application 
    # Other config options 

    config.autoload_paths << Dir["#{Rails.root}/app/models/*"] 
    end 
end 

第一種方法很容易,但不是最好的方法。第二種方法涉及命名空間您的模型與他們所在的組。這意味着,您有UserUserGroupUserPermissions,而不是UserUser::GroupUser::Permission

要使用它,請生成如下模型:rails generate model User::Group。 Rails會自動爲你創建所有的文件夾。另外一個好處是,使用這種方法,你不會有一個命名空間內拼出完整的型號名稱關聯:

class User < ActiveRecord::Base 
    belongs_to :group # Rails will detect User::Group as it's in the same namespace 
end 

class User::Group < ActiveRecord::Base 
    has_many :users 
end 

,只要你想你可以指定命名空間的不過多層次,所以User::Group::Permission會可能。

+0

您不必將子目錄添加到加載路徑,因爲應用程序/模型已經存在。通過引用一個嵌套的模型,比如`User :: Group`,Rails將通過查看這些路徑來自動加載它。所有`app`常量都在生產模式下急切加載。 – 2011-01-20 01:35:30

16

對於100個型號,這實際上是一個要求。一個目錄中有100個模型是嘈雜的。

試試這個得到Rails的方式(TM)

rails new MultiDirectoryExample 
cd MultiDirectoryExample 
rails generate scaffold User::Photo description:string 

關注腳本輸出的一個想法,查看生成的文件。

相關問題