dav*_*n88 1 ruby-on-rails activeadmin
我已将 Rails 控制器设置为使用 slugs 而不是 ids 来识别“拟合”(用于显示/编辑操作),因此我可以使用这样的 url 来访问显示页面:
http://localhost:3000/datasheets/slug-attribute-of-fiting
在routes.rb
resources :datasheets, only: [:index, :show, :edit], param: :slug
Run Code Online (Sandbox Code Playgroud)
在 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
Run Code Online (Sandbox Code Playgroud)
对于上面提到的 url 处的正常显示视图,这一切都正常工作,但是在添加 ActiveAdmin gem 时会出现问题(它会生成自己的控制器,据我所知这些控制器无法访问)。如果您尝试在活动管理仪表板中编辑“拟合”,您将被定向到http://localhost:3000/admin/fittings/slug-attribute-of-fiting/edit,它返回以下错误:
ActiveRecord::RecordNotFound in Admin::FittingsController#edit
Couldn't find Fitting with 'id'=slug-attribute-of-fiting
Run Code Online (Sandbox Code Playgroud)
鉴于我无法访问活动的管理控制器(对吗?)我如何拦截 slug 并使用它来提供 id。
谢谢
将以下内容添加到 app/admin/fittings.rb 解决了该问题:
controller do
defaults :finder => :find_by_slug
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
504 次 |
| 最近记录: |