13

有没有办法配置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 表。独立引擎文档

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

如果不可能,不想进一步挖掘。

4

2 回答 2

23

Rails 3 和 4
对 Rails Engine 代码库进行了一些研究以找到解决方案。如果您定义一个方法来指定表名前缀 (in /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
于 2013-10-17T19:31:16.127 回答
0

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

self.table_name = "name_you_want"

我认为这不会影响生成,但会完成原始发布者询问的用例。

于 2018-10-27T15:58:35.540 回答