2011-01-07 69 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 

关注脚本输出的一个想法,查看生成的文件。

相关问题