ActiveAdminのactionsボタンのitemについて

# はじめに
ActiveAdminは管理画面のCRUDを簡単に実装できるGemです。
ActiveAdminは便利なのですが、細かいところをイジろうとした際にどのように実装すれば良いのか詰まることが頻繁にあります。
今回は、条件によって表示するactionsを分けたいと思い[こちらの記事](https://qiita.com/yutackall/items/95b79e4fbed3e47d886e)を参考にさせていただいて実装をしました。
実装の中で以下のitemという記述が何をしているのかよくわからなかったため調べました。

```app/admin/users.rb
actions defaults: false do |user|
      item I18n.t('active_admin.view'), admin_user_path(user), class: 'view_link member_link'
      item I18n.t('active_admin.edit'), edit_admin_user_path(user), class: 'edit_link member_link'
      item I18n.t('active_admin.delete'), admin_user_path(user), class: 'delete_link member_link', method: :delete, data: { confirm: I18n.t('active_admin.delete_confirmation') } unless user.admin?
    end
```
# 何をしているのか？
itemを消してみると**SyntaxError**になります。

```app/admin/users.rb
actions defaults: false do |user|
      I18n.t('active_admin.view'), admin_user_path(user), class: 'view_link member_link'
      item I18n.t('active_admin.edit'), edit_admin_user_path(user), class: 'edit_link member_link'
      item I18n.t('active_admin.delete'), admin_user_path(user), class: 'delete_link member_link', method: :delete, data: { confirm: I18n.t('active_admin.delete_confirmation') } unless user.admin?
    end
```
<img width="1218" alt="スクリーンショット 2020-07-12 22.58.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576866/a27e8910-2ac1-19fb-a108-67baadae9823.png">

itemが必要なのはわかりましたが、itemの中身はどのようになっているのかpryで見てみます。

```app/admin/users.rb
actions defaults: false do |user|
      binding.pry
      item I18n.t('active_admin.view'), admin_user_path(user), class: 'view_link member_link'
      item I18n.t('active_admin.edit'), edit_admin_user_path(user), class: 'edit_link member_link'
      item I18n.t('active_admin.delete'), admin_user_path(user), class: 'delete_link member_link', method: :delete if user.id == 1
    end
```
<img width="757" alt="スクリーンショット_2020-07-12_23_02_53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576866/f5f64df2-a389-7985-4311-828722f4458f.png">

なるほどitemはaタグを生成してくれていることがわかりました。

# itemを使ってみる
itemには引数を渡すことができます。

```app/admin/users.rb
 actions defaults: false do |user|
   item('hoge')
 end
```
上記は次のアクションを生成します。
<img width="1140" alt="スクリーンショット_2020-07-12_23_18_34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576866/55f0a7b5-15cc-786e-20ed-87a246306324.png">
<img width="403" alt="スクリーンショット_2020-07-12_23_19_53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576866/46322964-0c68-3cc2-a237-1dee66cb4552.png">

hogeという名前で`/admin/users`へのリンクが生成されました。
また、itemに第2引数を渡すこともできます。

```app/admin/users.rb
actions defaults: false do |user|
  item('hoge', '/admin/hoge')
end

```
こちらは`hoge`という名前で`/admin/hoge`へのリンクを生成します。
<img width="339" alt="スクリーンショット_2020-07-12_23_25_58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576866/890b4176-fa9f-4954-aea5-4529f78d1632.png">

# 最後に
actionsをカスタマイズする際にitemに引数を渡すと、様々なリンクを生成できることがわかりました。
actionsについて書かれているソースコードの箇所は[こちら](https://github.com/activeadmin/activeadmin/blob/master/lib/active_admin/views/index_as_table.rb)になりますので、気になられた方は参照ください。

# 参考
- [GitHub ActiveAdmin](https://github.com/activeadmin/activeadmin)
- [ActiveAdmin](https://activeadmin.info/index.html)
- [ActiveAdmin の actions のボタンをカスタマイズする](https://qiita.com/yutackall/items/95b79e4fbed3e47d886e)