yujiroのプログラミング

勉強内容をアウトプットし、サボらないようにする為のブログ

<DAY122>carrierwaveを用いた画像表示と連続投稿について

\ Follow me!! /

●日程 6/22(土)

●学習日数 122日

●学習時間(本日)10 時間

●累計学習時間 629.5時間

●一日あたりの平均学習時間 5.11時間

結論

  • gem、carrerwaveを導入する
  • アップローダーを作成する
  • 保存したいモデルとカラムを指定する
  • ストロングパラメーターの設定

filed forにてデータを渡すモデルを分けていますので、

ストロングパラメーターの渡し方が違います。

gemの導入

gem 'carrierwave'

アップローダーの作成

コマンド操作で可能。保存させたいカラム名と合わせてuploaderを作成する。 今回はimageカラムの画像をアップロードさせたい。

bundle exec rails g uploader image

アップローダの中身割愛。store_dir以外はコメントアウトの状態。

app/uploder/item_image.rb

class ImageUploader < CarrierWave::Uploader::Base

 
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

 
end

モデルの設定

どのモデルの何のカラムを拾うのかを設定 今回はitem_imageモデルのimageカラムをアップロードの対象としている。

class ItemImage < ApplicationRecord

  belongs_to :item,optional: true
  mount_uploader :image, ImageUploader

end

ストロングパラメーターの設定

item_imageモデルの情報を受け取るので、このような形 itemとitem_imageの関係は1対多であり、imagesを複数持つので 複数形となる。

params.require(:item).permit(:name,item_images_attributes:[:image])

コントローラの設定

投稿したい画像の分、インスタンスを生成する。

 5.times{@item.item_images.build}

#viewの形

このような形になっている

 = form_for @item do |f|
   = f.text_field :name
   = f.fields_for :item_images do |i|
     = i.file_field :image

参考文献

qiita.com

github.com