この記事はウェブクルー Advent Calendar 2023 17日目の記事です。
昨日は@wc_yamasaki さんの「PlayFramework + OneloginでOIDC認証」でした。
はじめに
普段はScalaでバックエンドの開発を行っていますが、
社内のデータ管理ツールにはRailsAdminを導入しています。
こちらは以下の過去記事でも触れています。
・RailsAdminを使ってみた
・RailsAdminと遊ぼう~カスタマイズ戦記~
今回、RailsAdminのアクション機能のカスタマイズを最近触ったので、どんな感じか軽く書きました。
アクションとは
アクションの例
-
RailsAdminでは、各レコードに対して閲覧、修正、削除のアクションがデフォルトで存在しています。
-
上記画像のタブのほうの「一覧」「編集」などもアクションです(サイトは過去記事のようにしています )。
-
タブのほうで新規レコードの作成ができるアクションがデフォルトであるので、デフォルトのアクションだけでcrud操作ができます(インポートはデフォルトではないです。過去記事)。
-
各レコードでのアクションは、レコード別で処理するときに使われ、
タブのアクションでは、そうでないときに使われるもののようです。
アクションのカスタマイズ
crud操作はデフォルトのアクションがあるので不要ですが、
デフォルトで物足りないときに独自のアクション(カスタムアクション)を追加できます。
カスタムアクションの追加
カスタムアクションの追加について書きます。
カスタムアクションクラスの作成
lib配下に以下のようなファイルを追加します。
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 に以下のように記述して、カスタムアクションを登録します。
# アクションクラスを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を用意する
<h4>
exampleのアクション
</h4>
<div>
<%= link_to "戻る", :back %>
</div>
とりあえず確認
アクションの追加はできていますね。
サイトは日本語化しているので、Translation missingと出てます。
ロケール
日本語化が必要そうなので、
過去記事のようにconfig/locales/ja.ymlに追加します
ja:
admin:
js:
example_action:
menu: "例1メニュー"
title: "例1タイトル"
breadcrumb: "例1パンくずリスト"
再度確認
まとめ
カスタムアクションの良い例が思い浮かばず、特に機能のないアクションです。
デフォルトのcrudだけで割と事足りていると思いました。
とりあえず、RailsAdminのアクションはこんな感じと思ってもらえたら幸いです。
画面でpostする機能つけたりすると認証エラーなどなったりしましたが、素直にhtml.erbに認証情報を入れると動くと思います。
参考資料
Actions
Custom action
Rails Admin:Custom Actionの追加
おわりに
明日は @wc-kadowakiさんの投稿になります。
ウェブクルーでは一緒に働いていただける方を随時募集しています。
お気軽にご応募ください。
https://www.webcrew.co.jp/recruit/