在ActiveAdmin中使用ls

时间:2018-08-03 11:03:35

标签: ruby-on-rails activeadmin

我已经将Rails控制器设置为使用弹头(而不是ID)来标识“试穿”(用于显示/编辑动作),因此我可以使用这样的网址访问显示页面:

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(据我所知无法生成其自己的控制器)时会出现问题。如果您尝试在活动的管理控制台中编辑“正在拟合”,则会被定向到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

鉴于我无法进入活动的管理控制器(对吗?),我该如何拦截该弹头并使用它来提供ID。

谢谢

1 个答案:

答案 0 :(得分:3)

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

controller do
    defaults :finder => :find_by_slug
end