LoginSignup
7
1

RailsAdminのアクション機能のカスタマイズ

Last updated at Posted at 2023-12-16

この記事はウェブクルー Advent Calendar 2023 17日目の記事です。
昨日は@wc_yamasaki さんの「PlayFramework + OneloginでOIDC認証」でした。

はじめに

普段はScalaでバックエンドの開発を行っていますが、
社内のデータ管理ツールにはRailsAdminを導入しています。
こちらは以下の過去記事でも触れています。
RailsAdminを使ってみた
RailsAdminと遊ぼう~カスタマイズ戦記~

今回、RailsAdminのアクション機能のカスタマイズを最近触ったので、どんな感じか軽く書きました。

アクションとは

アクションの例

アクションとは以下のような動作をする箇所です。
1.gif

  • RailsAdminでは、各レコードに対して閲覧、修正、削除のアクションがデフォルトで存在しています。

  • 上記画像のタブのほうの「一覧」「編集」などもアクションです(サイトは過去記事のようにしています )。

  • タブのほうで新規レコードの作成ができるアクションがデフォルトであるので、デフォルトのアクションだけでcrud操作ができます(インポートはデフォルトではないです。過去記事)。

  • 各レコードでのアクションは、レコード別で処理するときに使われ、
    タブのアクションでは、そうでないときに使われるもののようです。

アクションのカスタマイズ

crud操作はデフォルトのアクションがあるので不要ですが、
デフォルトで物足りないときに独自のアクション(カスタムアクション)を追加できます。

カスタムアクションの追加

カスタムアクションの追加について書きます。

カスタムアクションクラスの作成

lib配下に以下のようなファイルを追加します。

lib/example_action.rb
module RailsAdmin
  module Config
    module Actions
      class ExampleAction < RailsAdmin::Config::Actions::Base
        RailsAdmin::Config::Actions.register(self)

        # 各レコードに対してのアクションはmember
        # タブに表示するならcollectionにする
        register_instance_option :member do
          true
        end
        # 表示の設定
        # 今回はExampleモデルだけ出すように設定
        register_instance_option :visible? do
          bindings[:abstract_model].model == Example
        end
        # ルーティング
        # getだけならデフォルトなので書かなくてもいい
        register_instance_option :http_methods do
          [:get]
        end
        # アイコン設定。今回は⭐
        register_instance_option :link_icon do
          'icon-star'
        end

        # controller
        # ここにアクションの内容など書く
        register_instance_option :controller do
          Proc.new do
            if request.get?
            # app/views/rails_admin/main/example_action.html.erbへ飛ぶ
            else
              raise "エラーメッセージ"
            end
          end
        end

      end
    end
  end
end

アクションの登録

config/initializers/rails_admin.rb に以下のように記述して、カスタムアクションを登録します。

config/initializers/rails_admin.rb
# アクションクラスをrequire
require Rails.root.join('lib', 'example_action.rb')

RailsAdmin.config do |config|
  config.actions do
    dashboard
    index
    # ...その他actions
    example_action     # 今回追加
  end

end

アクションを追加するここの並びで画面でのアクションの表示順も変わります。
最後尾に追加したのでmemberのアクション中でも最後に表示されます。

viewの用意

app/views/rails_admin/main/example_action.html.erb へ飛ぶのでviewを用意する

app/views/rails_admin/main/example_action.html.erb
<h4>
  exampleのアクション
</h4>
<div>
  <%= link_to "戻る", :back %>
</div>

とりあえず確認

2.gif
アクションの追加はできていますね。
サイトは日本語化しているので、Translation missingと出てます。

ロケール

日本語化が必要そうなので、
過去記事のようにconfig/locales/ja.ymlに追加します

config/locales/ja.yml
ja:
  admin:
    js:
      example_action:
        menu: "例1メニュー"
        title: "例1タイトル"
        breadcrumb: "例1パンくずリスト"

再度確認

3.gif

まとめ

カスタムアクションの良い例が思い浮かばず、特に機能のないアクションです。
デフォルトのcrudだけで割と事足りていると思いました。
とりあえず、RailsAdminのアクションはこんな感じと思ってもらえたら幸いです。

画面でpostする機能つけたりすると認証エラーなどなったりしましたが、素直にhtml.erbに認証情報を入れると動くと思います。

参考資料

Actions
Custom action
Rails Admin:Custom Actionの追加

おわりに

明日は @wc-kadowakiさんの投稿になります。

ウェブクルーでは一緒に働いていただける方を随時募集しています。
お気軽にご応募ください。
https://www.webcrew.co.jp/recruit/

7
1
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
7
1