我正在开发一个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项目的最佳方法的建议。
谢谢!
答案 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的研究,在选择目录名时应遵循一些规则:
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)
在活动支持依赖关系代码中会发生这种情况。
另一个警告是目录名必须能够变成有效的ruby 常量名称(虽然遵循#1,常量应该是未定义的)。对于 例如,如果目录名是app / models / user.related,则会产生这种结果 在active_support依赖关系代码中的以下错误中:
wrong constant name User.related (NameError)