Help us understand the problem. What is going on with this article?

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

はじめに

ActiveAdminは管理画面のCRUDを簡単に実装できるGemです。
ActiveAdminは便利なのですが、細かいところをイジろうとした際にどのように実装すれば良いのか詰まることが頻繁にあります。
今回は、条件によって表示するactionsを分けたいと思いこちらの記事を参考にさせていただいて実装をしました。
実装の中で以下の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

スクリーンショット 2020-07-12 22.58.22.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

スクリーンショット_2020-07-12_23_02_53.png

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

itemを使ってみる

itemには引数を渡すことができます。

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

上記は次のアクションを生成します。
スクリーンショット_2020-07-12_23_18_34.png
スクリーンショット_2020-07-12_23_19_53.png

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

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

こちらはhogeという名前で/admin/hogeへのリンクを生成します。
スクリーンショット_2020-07-12_23_25_58.png

最後に

actionsをカスタマイズする際にitemに引数を渡すと、様々なリンクを生成できることがわかりました。
actionsについて書かれているソースコードの箇所はこちらになりますので、気になられた方は参照ください。

参考

souken_b
福岡県内の院生。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away