はじめに
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
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
なるほどitemはaタグを生成してくれていることがわかりました。
itemを使ってみる
itemには引数を渡すことができます。
app/admin/users.rb
actions defaults: false do |user|
item('hoge')
end
hogeという名前で/admin/users
へのリンクが生成されました。
また、itemに第2引数を渡すこともできます。
app/admin/users.rb
actions defaults: false do |user|
item('hoge', '/admin/hoge')
end
こちらはhoge
という名前で/admin/hoge
へのリンクを生成します。
最後に
actionsをカスタマイズする際にitemに引数を渡すと、様々なリンクを生成できることがわかりました。
actionsについて書かれているソースコードの箇所はこちらになりますので、気になられた方は参照ください。