LoginSignup
8
8

More than 5 years have passed since last update.

ActiveAdminでfriendly_idを適用したモデルを扱う

Posted at

friendly_idはURLを人や検索エンジンから見てわかりやすくしてくれるgemです。

ActiveAdminはリソース毎の管理画面を簡単に作れるgemで、RESTなURLは用意されています。その半面、ActiveAdminのルールに沿わない場合は少しカスタマイズが必要です。

やりたいこと

  • リソースArticleに対して、基本的な一覧/詳細/登録/編集/削除を行う管理画面を作成する。
  • ユーザが利用する画面では、ArticleのURLをslugで表したいので、friendly_idを使う。

問題

friendly_idを利用したモデルの詳細ページは以下のようにslugでアクセスすることができます。

http://localhost:3000/articles/todays-daiary

ActiveAdminの管理画面でリンクをたどって、Articleの詳細ページに遷移しようとすると、以下のようなURLになります。

url
http://localhost:3000/admin/articles/todays-daiary

しかし、ActiveAdminは自動で/admin/articles/:idというURLでアクセスされることを期待しているので、以下のようなエラーが表示されます。

Couldn't find Article with 'id'=todays-daiary

解決方法

ActiveAdminのリソースのfinderを以下のように、friendly_idのfinderを通すように設定することで、slugのURLでリソースにアクセスできるようになります。

admin/article.rb
ActiveAdmin.register Article do
  controller do
    def find_resource
      scoped_collection.friendly.find(params[:id])
    end
  end
end

参考

Active Admin | Customizing resource retrieval

norman/friendly_id

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8