尝试在Rails中命名空间模型的模块/类冲突

时间:2015-03-02 17:06:35

标签: ruby-on-rails ruby-on-rails-4 namespaces

由于我的应用程序现在变得有点大,我正在尝试使用命名空间来帮助更好地组织我的模型。

我创建了一个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方式来解决这个问题,我错过了?

1 个答案:

答案 0 :(得分:2)

我想最简单的方法是将Theme定义为所有类扩展的模块

Theme::Instance暗示Instance类包含在Theme模块中。

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