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

kea*_*gik 13 ruby-on-rails rails-engines ruby-on-rails-3

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

class Engine < ::Rails::Engine
  isolate_namespace MyEngine
end
Run Code Online (Sandbox Code Playgroud)

此外,隔离引擎将根据命名空间设置其名称,因此MyEngine :: Engine.engine_name将为"my_engine".它还会将MyEngine.table_name_prefix设置为"my_engine_",将MyEngine :: Article模型更改为使用my_engine_articles表.孤立的引擎文档

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

如果不可能的话,不想进一步挖掘.

kea*_*gik 22

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
Run Code Online (Sandbox Code Playgroud)

  • 作品!确保将方法保留在类定义之外,并且只保留在模块块中,如答案中所示. (3认同)
  • 知道如何在rails 5中执行此操作吗?以上溶液配量在导轨中工作5。 (2认同)