我在我的rails應用程序中有超過100個模型,並且只是爲了組織,我將它們分爲多個文件夾,所有文件夾仍然位於主模型文件夾下,以便更輕鬆地導航項目並查看相關文件。把模型分成目錄是不是一個好主意?
這是一個壞主意嗎?什麼是軌道的方式來做到這一點?
我在我的rails應用程序中有超過100個模型,並且只是爲了組織,我將它們分爲多個文件夾,所有文件夾仍然位於主模型文件夾下,以便更輕鬆地導航項目並查看相關文件。把模型分成目錄是不是一個好主意?
這是一個壞主意嗎?什麼是軌道的方式來做到這一點?
不,這不是一個壞主意。許多人都這樣做,我無法在大型應用程序中生存。
有這樣做的方法有兩種:
首先是隻動車型。但是,您將不得不告訴Rails加載任意模型(因爲它不知道它們在哪裏)。像這樣的應該做的伎倆:
# In config/application.rb
module YourApp
class Application < Rails::Application
# Other config options
config.autoload_paths << Dir["#{Rails.root}/app/models/*"]
end
end
第一種方法很容易,但不是最好的方法。第二種方法涉及命名空間您的模型與他們所在的組。這意味着,您有User
和UserGroup
和UserPermissions
,而不是User
,User::Group
和User::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
會可能。
您不必將子目錄添加到加載路徑,因爲應用程序/模型已經存在。通過引用一個嵌套的模型,比如`User :: Group`,Rails將通過查看這些路徑來自動加載它。所有`app`常量都在生產模式下急切加載。 – 2011-01-20 01:35:30
對於100個型號,這實際上是一個要求。一個目錄中有100個模型是嘈雜的。
試試這個得到Rails的方式(TM)
rails new MultiDirectoryExample
cd MultiDirectoryExample
rails generate scaffold User::Photo description:string
關注腳本輸出的一個想法,查看生成的文件。
超過100款?這是一個大項目嗎? – 2011-01-07 04:47:41