范围 ActionText::RichText 覆盖 table_name

Extent ActionText::RichText to override table_name

ActionText::RichText class 在 Rails 代码中有 table 名称 hard coded

self.table_name = "action_text_rich_texts"

它会忽略 table_name_prefix 设置并使 table 名称 project_a_action_text_rich_texts 无法工作。

有没有办法覆盖来自 Rails class ActionText::RichTexttable_name

更新:将两个应用程序更新为 Rails 6.x,它们在云中共享相同的数据库,但使用 table_name_prefix 进行单独设置tables.

在 Rails 中,table ActionTextActiveStorage 的名称是硬编码的。目标是让项目 A 读取 project_a_action_text_,让项目 B 读取 project_b_action_ tables.

looks like 它会在 Rails 7

中至少修复 ActiveStorage

在那之前,我使用以下补丁覆盖 ActionTextActiveStorage 中的 table_name。当您将 Rails 升级到 7.

时,请务必验证它是否正常工作(或将其删除)

这是 ActionText

的示例

首先在lib文件夹中创建一个模块并设置新的table_name

#lib/extensions/action_text_rich_text.rb
# frozen_string_literal: true
module Extensions::ActionTextRichText
  extend ActiveSupport::Concern

  def table_name
    'project_a_action_text_rich_texts'
  end  
end

创建一个新的初始化器并将扩展模块添加到ActionText

#config/initializers/extensions.rb
Rails.application.config.to_prepare do
  ActionText::RichText.extend Extensions::ActionTextRichText    
end

它将覆盖在 Rails ActionText 模块中设置的 table_name。 现在您可以在 Rails 和 运行 迁移生成的 ActionText 迁移中更新 table 名称。

您可以在 Rails 控制台中调用 ActionText::RichText.table_name 进行测试。它应该打印您在扩展程序中设置的新 table 名称。