【问题标题】:Is it a bad idea do divide the models into directories?将模型划分为目录是一个坏主意吗?
【发布时间】:2011-01-07 01:54:51
【问题描述】:

我的 Rails 应用程序中有 100 多个模型,为了组织,我将它们分成文件夹,所有文件夹都在主模型文件夹下,只是为了更简单地浏览项目并查看文件相关。

这是个坏主意吗?执行此操作的 Rails 方法是什么?

【问题讨论】:

  • 超过 100 个模型?这是一个大项目吗?

标签: ruby-on-rails ruby activerecord ruby-on-rails-3


【解决方案1】:

不,这不是一个坏主意。很多人都这样做,在大型应用程序中我离不开它。

有两种方法:

首先是移动模型。但是,您必须告诉 Rails 加载任性的模型(因为它不知道它们在哪里)。像这样的东西应该可以解决问题:

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

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

第一种方法很简单,但并不是最好的方法。第二种方法涉及命名空间你的模型和他们所在的组。这意味着你有UserUser::Group和@而不是UserUserGroupUserPermissions 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 是可能的。

【讨论】:

  • 您不必将子目录添加到加载路径,因为 app/models 已经存在。通过引用嵌套模型,例如User::Group,Rails 将通过查找这些路径来自动加载它。所有app 常量都在生产模式下预先加载。
  • @Ryan 是的,如果您为模型命名。但是,如果您为它们命名,但仍将它们放在子文件夹中,并且不将路径添加到config. autoload_paths,它们将不会加载。
【解决方案2】:

对于 100 个模型,这实际上是一项要求。 100 个模型在一个目录中很嘈杂。

试试这个以了解 Rails Way (tm)

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

观察脚本输出并查看生成的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    相关资源
    最近更新 更多