【发布时间】:2011-01-07 01:54:51
【问题描述】:
我的 Rails 应用程序中有 100 多个模型,为了组织,我将它们分成文件夹,所有文件夹都在主模型文件夹下,只是为了更简单地浏览项目并查看文件相关。
这是个坏主意吗?执行此操作的 Rails 方法是什么?
【问题讨论】:
-
超过 100 个模型?这是一个大项目吗?
标签: ruby-on-rails ruby activerecord ruby-on-rails-3
我的 Rails 应用程序中有 100 多个模型,为了组织,我将它们分成文件夹,所有文件夹都在主模型文件夹下,只是为了更简单地浏览项目并查看文件相关。
这是个坏主意吗?执行此操作的 Rails 方法是什么?
【问题讨论】:
标签: ruby-on-rails ruby activerecord ruby-on-rails-3
不,这不是一个坏主意。很多人都这样做,在大型应用程序中我离不开它。
有两种方法:
首先是移动模型。但是,您必须告诉 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、User::Group和@而不是User和UserGroup和UserPermissions 987654327@.
要使用它,请生成这样的模型: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 常量都在生产模式下预先加载。
config. autoload_paths,它们将不会加载。
对于 100 个模型,这实际上是一项要求。 100 个模型在一个目录中很嘈杂。
试试这个以了解 Rails Way (tm)
rails new MultiDirectoryExample
cd MultiDirectoryExample
rails generate scaffold User::Photo description:string
观察脚本输出并查看生成的文件。
【讨论】: