使用 friendly_id 时,ActiveAdmin 中的面包屑列表显示错误的名称

Breadcrumbs list in ActiveAdmin shows wrong name when using friendly_id

我有一个名为 Company 的模型,它有 code。该列用于 friendly_id.

class Company < ActiveRecord::Base
  extend FriendlyId
  friendly_id :code, use: :slugged
end

ActiveAdmin 无法识别 friendly_id,因此我不得不重写 find_resource 方法,如下所示:

ActiveAdmin.register Company do
  controller do
    def find_resource
      scoped_collection.friendly.find(params[:id])
    end
  end
end

使用此代码,我可以通过 ActiveAdmin 编辑模型属性,但编辑页面中的面包屑列表显示错误的公司名称。 (即使用 id,而不是 code

在哪里以及如何配置以同时使用 ActiveAdminfriendly_id

来自 ActiveAdmin 源代码,可在 lib/active_admin/dsl.rb

中找到
# Rewrite breadcrumb links.
    # Block will be executed inside controller.
    # Block must return an array if you want to rewrite breadcrumb links.
    #
    # Example:
    #   ActiveAdmin.register Post do
    #     breadcrumb do
    #       [
    #         link_to('my piece', '/my/link/to/piece')
    #       ]
    #     end
    #   end
    #
    def breadcrumb(&block)
      config.breadcrumb = block
    end

由于它是在控制器中执行的,您可以使用自定义find_resource方法根据自己的喜好进行配置!

initializers/active_admin.rb 中将 :code 添加到 config.display_name 对你有用吗?

感谢@mark-merrit,通过这段代码面包屑显示正确的公司名称。

app/admin/companies.rb

ActiveAdmin.register Post do
  breadcrumb do
    links = [link_to('Admin', admin_root_path), link_to('Companies', admin_companies_path)]
    if %(show edit).include?(params['action'])
      links << link_to(company.name, admin_company_path)
    end
    links
  end
end

面包屑导航中的父路径可能有更好的实现方式。如果你知道请告诉我。