You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Rails引擎加载顺序以实现Partial重写?

调整Rails引擎视图查找优先级以重写Partial

核心思路

要让Admin引擎的视图资源被优先匹配,就得在Admin引擎的初始化逻辑里,把它的视图路径插到Wysiwyg引擎视图路径的前面——这样render解析partial时,会先找Admin里的自定义文件,找不到才会用Wysiwyg的原始文件。

具体操作步骤

1. 修改Admin引擎的初始化文件

找到Admin引擎的lib/admin/engine.rb(路径可能根据你的引擎结构略有变动),添加如下代码:

module Admin
  class Engine < ::Rails::Engine
    isolate_namespace Admin

    # 启动时调整视图查找路径优先级
    initializer 'admin.override_wysiwyg_partials' do |app|
      # 取出Wysiwyg引擎的有效视图路径
      wysiwyg_view_paths = Wysiwyg::Engine.paths["app/views"].existent
      # 取出Admin引擎的有效视图路径
      admin_view_paths = Admin::Engine.paths["app/views"].existent
      
      # 先把Wysiwyg的路径从全局视图路径里移除
      app.config.paths["app/views"].delete_if { |path| wysiwyg_view_paths.include?(path) }
      
      # 先插Admin的路径,再插Wysiwyg的,确保Admin优先级更高
      admin_view_paths.each { |path| app.config.paths["app/views"].unshift(path) }
      wysiwyg_view_paths.each { |path| app.config.paths["app/views"].unshift(path) }
    end
  end
end

2. 验证路径顺序(可选)

启动Rails控制台,输入以下命令确认路径顺序:

Rails.application.config.paths["app/views"]

输出的数组里,Admin引擎的app/views路径应该排在Wysiwyg引擎的路径前面。

3. 创建自定义Partial

在Admin引擎的app/views目录下,复刻Wysiwyg引擎目标partial的完整路径结构。比如Wysiwyg的partial是app/views/wysiwyg/editor/_toolbar.html.erb,那就在Admin引擎里建app/views/wysiwyg/editor/_toolbar.html.erb,写入自定义内容即可。

关键说明

  • 引擎的initializer会在Rails启动时执行,保证路径调整在视图查找前完成。
  • 用unshift而不是push,是因为ActionView会从数组前到后依次查找视图文件,前面的路径优先级更高。
  • 必须保证自定义partial的路径和Wysiwyg的完全一致,不然Rails还是会找到原始文件。

内容的提问来源于stack exchange,提问作者Stephen Nelson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:40:21