2015-03-02 98 views
1

由于我的应用程序现在变得有点大,我正尝试使用命名空间来帮助组织我的模型更好一点。模块/类冲突试图在Rails中命名空间模型

我创建了一个app/models/theme.rb文件,它将充当通往主题子目录中的其他主题相关模型的网关。

# app/models directory 
theme.rb 
theme/compiler.rb 
theme/instance.rb 
theme/revision.rb 

凡instance.rb将开始类似....

class Theme::Instance < ActiveRecord::Base 

end 

和theme.rb简直是...

class Theme 

    def initialize(args) 
    # some stuff here 
    end 
end 

但只要我创建一个使用新模式它会尝试按照以下方式覆盖新的theme.rb。

rails g model theme::revision 

#new theme.rb 

module Theme 
    def self.table_name_prefix 
    'theme_' 
    end 
end 

我可以摆脱模块和DEF self.table_name_prefix方法复制到每个班级,但似乎并不很干。我想使用表前缀,因为它使数据库中的事情更加明显。有没有一种“正确”的Rails方式来解决这个问题,我错过了?

+0

我想'Theme' ** **应该是一个模块,而不是一类。这对于'Theme :: Instance'语法更有意义。 – 2015-03-02 17:18:17

回答

2

我想最简单的方法是定义主题,所有类延伸

Theme::Instance暗示的实例类包含一个主题模块中的一个模块。

作为替代方案,您可以创建包含包含在每类中的所有常用方法的ThemeUtils模块,如在/ lib目录插件