代码之家  ›  专栏  ›  技术社区  ›  ironsand

activeadmin中的breadcrumbs列表在使用友好id时显示错误的名称

  •  0
  • ironsand  · 技术社区  · 6 年前

    我有个模特叫 Company 已经 code 是的。该列用于 friendly_id 是的。

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

    ActiveAdmin 不认识 友好的 ,所以我不得不重写 find_resource 方法如下:

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

    通过这段代码,我可以通过activeadmin编辑模型属性,但是编辑页面中的breadcrumbs列表显示了错误的公司名称。(即使用 id ,而不是 代码 )

    在何处以及如何配置以使用 主动管理 友好的 在同一时间?

    3 回复  |  直到 6 年前
        1
  •  1
  •   Mark Merritt    6 年前

    来自active admin源代码,可以在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方法来配置它!

        2
  •  0
  •   Piers C    6 年前

    是否前置:代码到 config.display_name 在里面 initializers/active_admin.rb 为你工作?

        3
  •  0
  •   ironsand    6 年前

    感谢@mark merrit,通过这个代码,breadcrumbs显示正确的公司名称。

    应用程序/管理/公司.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
    

    也许在面包屑中有更好的父母路径实现。如果你知道的话告诉我。