Techioz Blog

フレンドリー ID を持つ ActiveAdmin

概要

私はRails 4アプリケーションでslugを使用してfriend_idを使用しています。現在、active_admin gem を使用しています。

問題:

グループ リソースのアクティブな管理者からリンクの表示をクリックすると、次の例外がスローされます。

ActiveRecord::RecordNotFound at /admin/groups/username20-s-group-1

どうやら、active_admin のデフォルト関数の一部をオーバーライドする必要があるのでしょうか?

解決策

アプリケーションがいくつかのリソースを終了する場合があります。そのため、アプリケーションを DRY に保つために、アプリケーション全体に数行のコードを必要とする優れたソリューションがあります。単純に activeadmin のリソース コントローラーをオーバーライドするだけです。

次の内容を含む config/initializers/active_admin_monkey_patching.rb ファイルを作成します。

ActiveAdmin::ResourceController.class_eval do
  def find_resource
    finder = resource_class.is_a?(FriendlyId) ? :slug : :id
    scoped_collection.find_by(finder => params[:id])
  end
end

サーバーを再起動することを忘れないでください。