大项目的更好的Rails文件结构?

时间:2013-09-27 18:06:58

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

我似乎总是被困在同一个文件夹命名空间中的40个不同模型,如post.rb,post_comment.rb,post_rating.rb等等。有没有办法在rails中创建类似于模块的东西,用帖子命名一切到一个单独的目录? (此目录也可能包含不同的控制器和视图)。

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

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

如果您有意见,请告诉我们!

3 个答案:

答案 0 :(得分:2)

我使用名称空间。

当您运行命令rails 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

答案 1 :(得分:1)

看来你的建模有一些问题。

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

您将忙于关注和使用具有类似功能的这些模型,然后是他们的控制器,他们的观点。 “post_rating”等同样如此。

我不会说40多个型号太多了。但是看到新的Basecamp有50多个型号而Dispora有30多个没有子文件夹的型号,可能值得对你的应用程序架构进行审查以削减一些。

如果您打算对其他人使用“评论”,“评分”,例如“照片”,您可以直接使用该名称,并计划关联,多态,模块来干掉代码。

答案 2 :(得分:0)

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

重命名文件夹中的每个模型

在我看来,不是更新代码库中所有模型的类引用,而是将它们全部留在模型目录中并处理具有膨胀模型目录的痛苦可能更容易。

相关读物: