Rails项目组织有很多模型

时间:2011-02-11 21:04:52

标签: ruby-on-rails ruby-on-rails-3 models organization

我正在开发一个rails应用程序,开始看起来(对我而言)是很多模型。现在有15个,但我正在考虑增加3-4个作为模型的“标签”(我需要比Acts As Taggable提供更多的功能)。

所以,这让我有点烦恼的原因是15个模型中的7个属于一个共同的父母。有几个是belongs_to,有些是has_and_belongs_to_many。我正在考虑的所有新模型也属于同一个父母。

所以,我想知道的是,组织这种情况的最佳“Railsy”方式是什么?

而不是app/models超级拥挤6个“一流”模型和10个以上其中一个孩子,我应该/我可以开始在我的app文件夹中使用子文件夹吗?即:app/models/parent/child.rb

我知道这是一个开放式问题,但我非常感谢有关使用大量模型处理rails项目的最佳方法的建议。

谢谢!

2 个答案:

答案 0 :(得分:6)

你可以做到这一点,我总是这样做:)

请注意:如果您创建的文件夹名称为您的模型,则会失败。实际上,Rails会认为你想扩展它。

因此,在您的模型文件夹中,在您想要的任何花哨之前添加您的班级名称。

示例:如果要放置与用户相关的模型,请将它们放在models/user_related/

您必须将其添加到application.rb文件中:

config.autoload_paths += Dir["#{Rails.root.to_s}/app/models/*"].find_all { |f| File.stat(f).directory? }  

这将自动加载models目录中包含的所有文件夹。

答案 1 :(得分:4)

我认为apneadiving的答案是好方法

根据对activesupport 3.0.11的研究,在选择目录名时应遵循一些规则:

  1. 该名称必须永远不会与系统中的常量匹配,否则可能会发生LoadError
  2. 该名称必须能够转换为有效的常量名称,否则将发生NameError。
  3. 问题#1的解释

    Apneadiving的目录名称app / models / user_related的示例与a一样长 常量UserRelated永远不会在您的代码中使用。否则LoadError可以 可能发生。

    例如,假设第一次有一个名为UserProfile的模型 rails看到常量在UserRelated模块中。 Rails将首先尝试 加载UserRelated \:\:UserProfile常量并失败UserProfile 恒定。

    如果user_profile文件位于app / models / user_related / user_profile.rb,则此 匹配UserRelated \:\:UserProfile的下划线路径和文件 期望定义UserRelated :: UserProfile常量。这个 会引发以下错误,因为它确实定义了UserProfile 恒定。

    Expected app/models/user_related/user_profile.rb to define UserRelated::UserProfile (LoadError)
    

    在活动支持依赖关系代码中会发生这种情况。

    问题#2的解释

    另一个警告是目录名必须能够变成有效的ruby 常量名称(虽然遵循#1,常量应该是未定义的)。对于 例如,如果目录名是app / models / user.related,则会产生这种结果 在active_support依赖关系代码中的以下错误中:

    wrong constant name User.related (NameError)