代码之家  ›  专栏  ›  技术社区  ›  daveanderson88

在activeadminurl中使用slug

  •  0
  • daveanderson88  · 技术社区  · 6 年前

    我已经将rails控制器设置为使用slug而不是id来标识“Fitting”(用于显示/编辑操作),因此我可以使用这样的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(它生成自己的控制器,据我所知,这些控制器是不可访问的)时会出现问题。如果试图在活动的管理仪表板中编辑“配件”,则会指向 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
    

    假设我无法访问活动的管理控制器(对吧?)我怎么能截获子弹并用它提供身份证。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  3
  •   daveanderson88    6 年前

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

    controller do
        defaults :finder => :find_by_slug
    end