我在我的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