我正在使用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} }吗
答案 0 :(得分:0)
轨道方式是不这样做。
您只能使用命名空间模型和控制器来进行巨大的逻辑分离。例如,如果您的管理模型仅在管理期间适用,则可能具有:
app/admin/report.rb
app/admin/dashboard.rb
您可以将它们引用为Admin :: Report
但是没有“Admin”对象 - 在您的示例中,您有一个“Article”对象...我不会以这种方式对文件进行分组...将它们全部保存在应用程序的全局命名空间中。