
CarrierWaveで複数の画像を保存する方法 – Rails
CarrierWaveで複数の画像を保存する方法 – Rails
こういうフォームがあって
<%= form_for(@user, html: { multipart: true } ) do |f| %> <%= f.label :top_image %> <%= f.file_field :image %> <%= f.label :cover_image %> <%= f.file_field :cover_image %>
fileの二つを保存したい
mount_uploader :image, ImageUploader
mount_uploader :cover_image, BackgroundImageUploader
これでできる。/app/uploaders/image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base # ストレージにS3を指定 storage :fog # 画像ごとに保存するディレクトリを変えたいのでオーバーライド def store_dir # 例えばidごとにディレクトリを分けてみる "#{model.id}" end # ファイル名を書き換える def filename # 例えば avater_1.jpg みたいなファイル名にしてみる "Profile_#{model.id}.#{file.extension}" if original_filename end # キャッシュ先のディレクトリを指定 def cache_dir "cache" end end class BackgroundImageUploader < CarrierWave::Uploader::Base # ストレージにS3を指定 storage :fog # 画像ごとに保存するディレクトリを変えたいのでオーバーライド def store_dir # 例えばidごとにディレクトリを分けてみる "#{model.id}" end # ファイル名を書き換える def filename # 例えば avater_1.jpg みたいなファイル名にしてみる "Background_#{model.id}.#{file.extension}" if original_filename end # キャッシュ先のディレクトリを指定 def cache_dir "cache" end end
** Rubyを学べる良書おすすめ