我似乎总是卡在同一个文件夹中的 40 个不同模型,命名空间为 post.rb、post_comment.rb、post_rating.rb 等。有没有办法在 rails 中制作类似模块的东西,将所有内容与帖子命名空间分开目录?(这个目录也可以包含不同的控制器和视图)。
Rails Engines 似乎很有希望,但也许还有其他我错过的东西?
我认为这将使项目更容易概述并作为新的合作者进入。
如果您有反对意见,请告诉!
我似乎总是卡在同一个文件夹中的 40 个不同模型,命名空间为 post.rb、post_comment.rb、post_rating.rb 等。有没有办法在 rails 中制作类似模块的东西,将所有内容与帖子命名空间分开目录?(这个目录也可以包含不同的控制器和视图)。
Rails Engines 似乎很有希望,但也许还有其他我错过的东西?
我认为这将使项目更容易概述并作为新的合作者进入。
如果您有反对意见,请告诉!
我使用命名空间。
当你运行 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
看来你的建模有问题。
评论就是评论。帖子可以有评论,照片可以有评论。但是拥有像 post_comment、photo_comment 这样的模型绝对不是一个好习惯。好吧,我只看到有问题的“post_comment”,但我猜你是因为这个原因命名的。
您将忙于关注并为这些具有相似功能的模型工作,然后是它们的控制器和视图。“post_rating”等也是如此。
我不会说 40 多个模型太多了。但是看到新的 Basecamp 有 50 多个模型,而 Dispora 有 30 多个没有子文件夹的模型,可能值得回顾一下您的应用程序架构以减少一些。
如果你打算对“照片”等其他人使用“评论”、“评级”,则可以直接使用名称,并计划关联、多态、模块来 DRY 代码。
例如,您可以将所有post_*.rb
模型放入一个posts
文件夹中。确保使用Posts::Post*
ie重命名文件夹中的每个模型class Posts::PostRating < ActiveRecord::Base
在我看来,与其更新代码库中所有模型的类引用,不如将它们全部留在模型目录中并处理模型目录臃肿的痛苦。
相关阅读: