在 ActiveAdmin 网址中使用 Slug
Using Slugs in ActiveAdmin Urls
我已经将我的 rails 控制器设置为使用 slug 而不是 id 来识别 "Fitting"(对于 show/edit 操作),因此我可以使用 url像这样到达展示页面:
http://localhost:3000/datasheets/slug-attribute-of-fiting
在routes.rb
resources :datasheets, only: [:index, :show, :edit], param: :slug
在datasheets_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-attribute-of-fiting/edit,其中 returns 出现以下错误:
ActiveRecord::RecordNotFound in Admin::FittingsController#edit
Couldn't find Fitting with 'id'=slug-attribute-of-fiting
鉴于我无法访问活动的管理控制器(对吗?)我如何拦截 slug 并使用它来提供 id。
谢谢
将以下内容添加到 app/admin/fittings.rb 解决了问题:
controller do
defaults :finder => :find_by_slug
end
我已经将我的 rails 控制器设置为使用 slug 而不是 id 来识别 "Fitting"(对于 show/edit 操作),因此我可以使用 url像这样到达展示页面:
http://localhost:3000/datasheets/slug-attribute-of-fiting
在routes.rb
resources :datasheets, only: [:index, :show, :edit], param: :slug
在datasheets_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-attribute-of-fiting/edit,其中 returns 出现以下错误:
ActiveRecord::RecordNotFound in Admin::FittingsController#edit
Couldn't find Fitting with 'id'=slug-attribute-of-fiting
鉴于我无法访问活动的管理控制器(对吗?)我如何拦截 slug 并使用它来提供 id。
谢谢
将以下内容添加到 app/admin/fittings.rb 解决了问题:
controller do
defaults :finder => :find_by_slug
end