由于我的应用程序现在变得有点大,我正在尝试使用命名空间来帮助更好地组织我的模型。
我创建了一个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
and 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 :(得分:2)
我想最简单的方法是将Theme定义为所有类扩展的模块
Theme::Instance
暗示Instance类包含在Theme模块中。
作为替代方案,您可以创建一个ThemeUtils模块,其中包含每个类中包含的所有常用方法,例如/ lib中的插件