Список крошек в ActiveAdmin показывает неправильное имя при использовании 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
)
Где и как я могу настроить использование ActiveAdmin
а также friendly_id
в то же время?
3 ответа
Из исходного кода 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, чтобы настроить его по своему вкусу!
Спасибо за @mark-merrit, с помощью этого кода хлебные крошки показывают правильное название компании.
приложение / администратор /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
Возможно есть лучшая реализация для родительского пути в сухарях. Дайте мне знать, если вы знаете об этом.
Предлагает ли: код для config.display_name
в initializers/active_admin.rb
работа для тебя?