LoginSignup
1
0

More than 3 years have passed since last update.

【ActiveAdmin】コピペ新規作成するcloneアクションを追加する

Last updated at Posted at 2020-09-28

はじめに

rails_adminの方ではclone機能をgemで追加して実装出来たのですが……
→ https://qiita.com/MATO/items/116bda1f3629ece0812c

active_adminの方ではgemではなく設定ファイルをいじって実装出来たのでメモです。
かなり汎用性あるコード書けたと思います。

ソースコード

関係ない所もありますが、見返す用に全部載せておきます。

app/admin/items.rb
ActiveAdmin.register Item do

  permit_params :kind_id, :name, :memo

  # 一覧ページで検索フィルター要らないので消しておく
  config.filters = false

  # 一覧ページでのデフォルトソート
  config.sort_order = 'updated_at_desc'

  # 間違って削除しないように処理自体を消しておく
  actions :all, :except => [:destroy]

  # カスタムアクション、clone
  member_action :clone, method: :get do
    from_item = Item.find(params[:id])
    @item     = Item.new

    # ここでコピペしておきたいカラムをもう入れてしまう
    @item[:kind_id]     = from_item.kind_id
    @item[:name]        = from_item.name

    render :new, layout: false
  end

  # 詳細ページにもCloneボタンを追加
  # indexページでエラーが出る、、、のでIF文入れておく
  action_item :only => :show do
    if params[:id].present?
      link_to "Clone Item", clone_admin_item_path(id: params[:id])
    end
  end

  index do
      # selectable_column
      # id_column

      column :kind
      column :name
      column :memo

      actions defaults: false do |item|
        item 'View', admin_item_path(item), class: 'view_link member_link'
        item 'Edit', edit_admin_item_path(item), class: 'edit_link member_link'
        item 'Clone', clone_admin_item_path(id: item.id), class: 'clone_link member_link'
      end

  end

  form do |f|
    inputs do
      input :name
      input :kind, collection: Kind.all.order(:name)
      input :memo
    end

    actions
  end


end

これで一覧ページでレコードごとにCloneリンクも追加されて、機能します。
/adminから/manageとかに名前を変更した場合でも、rails routesで表示されるパスリンク?を使えばいけます。

カスタムアクションとして

今回は「新規作成ページ」というnewと同じ処理する時にちょっとデータを入れただけ、ですね。
ただこれを元にしたら、そのレコードに対しての処理を好き放題にControllerに書くように書けたので、かなり楽しくカスタムできそうです。

参考ページ

GitHubにドンピシャの質問あったのですが、色々と方法ありすぎたり、2013年とちと古かったり、英語だし……でちょっと違いますね。
https://github.com/activeadmin/activeadmin/issues/972

俺のコードの方がキレイ🤤

終わり

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