在ActiveAdmin URL中使用Slugs



我已经设置了rails控制器,使用slugs而不是id来识别"Fitting"(用于显示/编辑操作(,所以我可以使用这样的url来访问显示页面:

http://localhost:3000/datasheets/slug-拟合的属性

在路线.rb

resources :datasheets, only: [:index, :show, :edit], param: :slug

在数据表s_controller.rb 中

def show
fitting = Fitting.where(slug:(params[:slug])).first
pdf = DatasheetPdf.new(fitting)
send_data pdf.render, filename: "#{fitting.slug}-datasheet-#{Date.today}.pdf", type: 'application/pdf', disposition: 'inline'
end

对于上面提到的url上的正常显示视图,这一切都正常工作,但在添加ActiveAdmin gem(它生成自己的控制器,据我所知,这些控制器是不可访问的(时会出现问题。如果您试图在活动的管理面板中编辑"Fitting",则会将您引导到http://localhost:3000/admin/fittings/slug-fiting/edit的属性,返回以下错误:

ActiveRecord::RecordNotFound in Admin::FittingsController#edit
Couldn't find Fitting with 'id'=slug-attribute-of-fiting

考虑到我无法访问活动的管理控制器(对吧?(,我如何拦截段塞并使用它来提供id。

感谢

在app/admin/fittings.rb中添加以下内容解决了问题:

controller do
defaults :finder => :find_by_slug
end

最新更新