0

我似乎总是卡在同一个文件夹中的 40 个不同模型,命名空间为 post.rb、post_comment.rb、post_rating.rb 等。有没有办法在 rails 中制作类似模块的东西,将所有内容与帖子命名空间分开目录?(这个目录也可以包含不同的控制器和视图)。

Rails Engines 似乎很有希望,但也许还有其他我错过的东西?

我认为这将使项目更容易概述并作为新的合作者进入。

如果您有反对意见,请告诉!

4

3 回答 3

3

我使用命名空间。

当你运行 commandrails g scaffold blog/post时,它会在 Blog 命名空间下生成 Post。

应用程序/模型/blog.rb

module Blog
  def self.table_name_prefix
    'blog_'
  end
end

应用程序/模型/博客/post.rb

class Blog::Post < ActiveRecord::Base
  has_and_belongs_to_many :categories
end

应用程序/模型/博客/category.rb

class Blog::Category < ActiveRecord::Base
  has_and_belongs_to_many :posts
end
于 2013-09-27T18:33:48.670 回答
1

看来你的建模有问题。

评论就是评论。帖子可以有评论,照片可以有评论。但是拥有像 post_comment、photo_comment 这样的模型绝对不是一个好习惯。好吧,我只看到有问题的“post_comment”,但我猜你是因为这个原因命名的。

您将忙于关注并为这些具有相似功能的模型工作,然后是它们的控制器和视图。“post_rating”等也是如此。

我不会说 40 多个模型太多了。但是看到新的 Basecamp 有 50 多个模型,而 Dispora 有 30 多个没有子文件夹的模型,可能值得回顾一下您的应用程序架构以减少一些。

如果你打算对“照片”等其他人使用“评论”、“评级”,则可以直接使用名称,并计划关联、多态、模块来 DRY 代码。

于 2013-09-27T18:46:23.393 回答
0

例如,您可以将所有post_*.rb模型放入一个posts文件夹中。确保使用Posts::Post*ie重命名文件夹中的每个模型class Posts::PostRating < ActiveRecord::Base

在我看来,与其更新代码库中所有模型的类引用,不如将它们全部留在模型目录中并处理模型目录臃肿的痛苦。

相关阅读:

于 2013-09-27T18:18:42.003 回答