active adminの管理画面内でcocoonを使い、画像を複数枚登録できるようにしました。ただ、登録した画像を表示させると、なぜか1つの画像が2回ずつ表示されてしまいます。
モデルはpostとpost_imageで実装しています。
admin/post.rb
ActiveAdmin.register Post do permit_params( 〜省略〜 post_images_attributes: %i[ id image _destroy ] 〜省略〜 panel t('activerecord.models.post_image'), style: 'margin-top: 30px;' do table_for post.post_images do column t('activerecord.attributes.post_image.image') do |post| image_tag post&.image&.to_s, width: 50, height: 50 end end end 〜省略〜 f.inputs t('activerecord.models.post_image') do render 'admin/posts/post_images', f: f end 〜省略〜 end
app/admin/view/posts/_post_images.html.haml
.shadow.overflow-hidden.sm:rounded-md .px-4.py-5.bg-white.sm:p-6 .grid.grid-cols-6.gap-6 .col-span-6.sm:col-span-4 .nested-items = f.object.post_images.length = f.simple_fields_for :post_images do |image| = render 'admin/posts/post_file_fields', f: image .cocoon.text-center - add_button = capture do .cocoon-disable-color %i.fas.fa-plus-circle ファイルを追加 = link_to_add_association add_button, f, :post_images, partial: 'admin/posts/product_file_fields', data: { association_insertion_node: '.nested-items', association_insertion_method: 'append' }
app/admin/view/posts/_post_file_fields.html.haml
.nested-fields.row .col-span-6.sm:col-span-4 - if f.object.image.to_s.present? = image_tag f.object.image.to_s, class: 'w-32 h-32 flex-shrink-0.mx-auto.bg-black' - else = f.file_field :image, as: :file .cocoon - remove_button = capture do .cocoon-disable-color.r-special-paid-leave--remove-button.r-cocoon %i.fas.fa-minus-circle = t('actions.destroy') = link_to_remove_association remove_button, f
下から2番目の画像の上にある2と書いてあるところが、app/admin/view/posts/_post_images.html.hamlの
= f.object.post_images.length
ですので、それより上に表示されている箇所を表示させたくないです。
調べてみたものの、同じような場面の記事がなく解決方法が見当たらない状態です。考えられる原因、対処法などわかる方がいらっしゃいましたら教えていただけますと幸いです。
あなたの回答
tips
プレビュー