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

iro*_*and 4 ruby-on-rails friendly-id activeadmin

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

class Company < ActiveRecord::Base
  extend FriendlyId
  friendly_id :code, use: :slugged
end
Run Code Online (Sandbox Code Playgroud)

ActiveAdmin无法识别friendly_id,所以我必须重写find_resource这样的方法:

ActiveAdmin.register Company do
  controller do
    def find_resource
      scoped_collection.friendly.find(params[:id])
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

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

在哪里以及如何配置以同时使用ActiveAdminand ?friendly_id

iro*_*and 7

感谢 @mark-merrit 的想法,使用下面的代码您可以动态自定义面包屑:

ActiveAdmin.register Company do
  breadcrumb do
    links = [link_to('Admin', admin_root_path), link_to('Companies', admin_companies_path)]
    if %(show edit update).include?(params['action'])
      links << link_to(resource.name, admin_company_path)
    end
    links
  end
end
Run Code Online (Sandbox Code Playgroud)


Mar*_*itt 5

breadcrumb方法在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
Run Code Online (Sandbox Code Playgroud)

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