如何命名模型\类?

时间:2011-10-28 17:17:39

标签: ruby-on-rails ruby ruby-on-rails-3 class namespaces

我正在使用Ruby on Rails 3.1.1并且我想“(重新)命名”\“使用”命名空间模型文件和相关类“alàRubyon Rails Way”保持最新状态数据库表名。也就是说,我有以下文件系统:

- app/models/article.rb
- app/models/articles.rb
- app/models/articles/comment.rb
- app/models/articles/category.rb
- app/models/articles/...

相关数据库表名分别为:

# Note: Since the 'app/models/articles.rb' file is related to a module (read
# below for more information) it has not a related database table
- articles
- articles_comments
- articles_categories
- ...

在我的app/models/articles.rb文件中:

module Articles
  def self.table_name_prefix
    'articles_'
  end
end

对于istance,在app/models/articles/comment.rb我有

class Articles::Comment < ActiveRecord::Base
  ...
end

这是“命名”“使用”命名空间类的正确方法吗?


也许“正确”的方式是将命名空间命名为单数名称(例如:使用class Article::Comment ... end而不是class Articles::Comment ... end),以便组织文件,使用/article/目录而不是/articles/。在这种情况下,文件系统应为:

# Note: the 'app/models/articles.rb', maybe, should not be present
- app/models/article.rb
- app/models/article/comment.rb
- app/models/article/category.rb
- app/models/article/...

如果是这样,它应该如何适用于app/models/articles.rb文件(最后一个示例中不再存在),以便将数据库表名称前缀保留为{{1} }吗

1 个答案:

答案 0 :(得分:0)

轨道方式是不这样做。

您只能使用命名空间模型和控制器来进行巨大的逻辑分离。例如,如果您的管理模型仅在管理期间适用,则可能具有:

app/admin/report.rb
app/admin/dashboard.rb

您可以将它们引用为Admin :: Report

但是没有“Admin”对象 - 在您的示例中,您有一个“Article”对象...我不会以这种方式对文件进行分组...将它们全部保存在应用程序的全局命名空间中。