Rails Admin自定义InAppShow新动作不显示问题求助
解决Rails Admin自定义应用内展示动作(替代移除的show_in_app)
确实,新版Rails Admin已经移除了默认的show_in_app动作,旧教程里的代码在新版本中需要调整细节才能正常显示。下面是经过验证的完整实现方案:
1. 创建并修正自定义动作文件
在lib/in_app_show.rb中更新代码,适配新版Rails Admin的规范:
require 'rails_admin/config/actions' require 'rails_admin/config/actions/base' module RailsAdmin module Config module Actions class InAppShow < RailsAdmin::Config::Actions::Base # 注册动作到Rails Admin RailsAdmin::Config::Actions.register(self) # 标记为单条记录专属动作(member action) register_instance_option :member do true end # 明确动作名称(用于配置中调用) register_instance_option :action_name do :in_app_show end # 控制动作是否可见:确保用户有权限,且对象能生成合法的前端URL register_instance_option :visible? do authorized? && begin # 检查模型是否有对应的路由助手方法 bindings[:object].respond_to?(:to_param) && bindings[:controller].main_app.respond_to?("#{bindings[:object].class.name.underscore}_path".to_sym) rescue false end end # 动作核心逻辑:重定向到应用内的对象展示页 register_instance_option :controller do proc do redirect_to main_app.polymorphic_path(@object), notice: "跳转到应用内展示页面" end end # 设置动作图标(新版Rails Admin默认用Font Awesome,替换为适配的图标类) register_instance_option :link_icon do 'fa fa-external-link' end # 禁用PJAX,避免跳转异常 register_instance_option :pjax? do false end # 设置动作显示的标签文本 register_instance_option :label do '应用内展示' end end end end end
关键调整说明:
- 图标替换:旧的
icon-camera-retro属于Bootstrap Glyphicons,新版Rails Admin默认使用Font Awesome,因此换成fa fa-external-link这类兼容的图标类。 - visible?逻辑优化:更可靠地检查对象是否有对应的路由助手方法,避免无差别rescue吞掉有效错误。
- 新增action_name和label:明确动作标识和显示文本,减少配置时的歧义。
2. 配置Rails Admin加载并启用动作
在config/initializers/rails_admin.rb中更新配置:
# 先加载自定义动作文件 require Rails.root.join('lib', 'in_app_show.rb') RailsAdmin.config do |config| # 你的其他Rails Admin配置(比如权限、当前用户方法等) # config.authenticate_with { ... } # config.current_user_method { ... } # 启用动作列表 config.actions do dashboard # 必选动作 index # 必选动作 new export bulk_delete show edit delete # 添加自定义的应用内展示动作 in_app_show end end
额外注意:
如果你的Rails版本较新,需要确保lib目录在加载路径中,可在config/application.rb中添加:
config.autoload_paths << Rails.root.join('lib')
修改完成后重启Rails服务器,因为初始化文件和lib目录下的文件需要重新加载。
3. 测试验证
启动服务器后,进入Rails Admin的任意记录详情页,你应该能看到新增的「应用内展示」按钮(带外部链接图标),点击后会跳转到应用中该记录的前端展示页面。
如果仍不显示,可排查以下点:
- 对应模型是否生成了
xxx_path路由助手(比如post_path对应Post模型)。 - 暂时移除
visible?中的authorized?,测试是否是权限问题。 - 查看服务器日志,检查是否有加载
in_app_show.rb的错误信息。
内容的提问来源于stack exchange,提问作者Afsanefda
相关产品推荐
相关产品推荐

