Active Storageは、Rails5.2で追加された、ファイルアップロードを行うための機能です。
Rails5.2からはrailsの標準で入っているgemです。
Active Storageを使えば、フォームで画像の投稿機能などが簡単に作れます。
また、Amazon S3, GoogleCloud Storage, MicrosoftAzure Storageなどの
クラウドストレージサービスを使ってファイルのアップロードを簡単に行うこともできます。
# マイグレーションファイルを作成
% rails active_storage:install
# マイグレーションファイルを実行
% rails db:migrate
site.rb
class Site < ApplicationRecord
# Active Storage の「1対1」の画像アップロード
has_one_attached :og_image
has_one_attached :favicon
# Active Storage の「1対多」の画像アップロード
has_many_attached :main_images
end
複数枚の画像をアップロードしたいモデルにhas_many_attachedを追加します。
site_controller.rb
private
def site_params
params.require(:site).permit(:name, :subtitle, :description, :favicon, :og_image, main_images: [])#最後追加
end
main_images: []これで配列を渡しています。
admin/sites/edit.html.slim
#入力フォーム部分(gem 'simple_form'使用)
= f.input :main_images, as: :file, input_html: { multiple: true }
#画像表示部分
- if @site.main_images.attached?
.main_images_box
- @site.main_images.each do |main_image|
.main_image
= image_tag main_image.variant(resize:'300x100').processed
gem 'simple_form'を使っているときは、複数枚選択を設定するとき、
input_html: { multiple: true }を使います。