我有一个名为
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
?
感谢@mark-merrit,通过此代码面包屑显示正确的公司名称。
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
也许面包屑中的父母路径有更好的实现。如果您知道请告诉我。
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
由于它是在控制器中执行的,因此您可以使用自定义的
find_resource
方法来根据您的喜好配置它!
在
config.display_name
中将 :code 添加到 initializers/active_admin.rb
是否适合您?