<DAY122>carrierwaveを用いた画像表示と連続投稿について
●日程 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