Rails可挂载引擎与isolate_namespace但在表上没有前缀命名空间

时间:2013-10-17 19:12:00

标签: ruby-on-rails ruby-on-rails-3 rails-engines

有没有办法配置isolate_namespace方法不使用带前缀的表名?

class Engine < ::Rails::Engine
  isolate_namespace MyEngine
end
  

此外,隔离引擎将根据命名空间设置其名称,因此MyEngine :: Engine.engine_name将为“my_engine”。它还会将MyEngine.table_name_prefix设置为“my_engine_”,将MyEngine :: Article模型更改为使用my_engine_articles表。Isolated Engine Docs

在设计原型时,我遇到了一个需要使用隔离命名空间模式的路由的问题,但数据库表没有。这是因为我正在编写的可安装引擎拥有它自己的自包含数据库。

如果不可能的话,不要再深入挖掘。

2 个答案:

答案 0 :(得分:22)

Rails 3和4
稍微深入研究Rails Engine代码库以找到解决方案。 如果您定义一个方法来指定表名前缀(在/lib/my_engine.rb中),它将只使用它。所以设置返回nil工作正常。

require "my_engine/engine"

module MyEngine
  # Don't have prefix method return anything.
  # This will keep Rails Engine from generating all table prefixes with the engines name
  def self.table_name_prefix
  end
end

答案 1 :(得分:0)

对于Rails 5,解决方案似乎是在引擎中所需的任何模型上声明以下内容:

self.table_name = "name_you_want"

这不会影响生成,但是我认为可以完成原始海报所要求的用例。