個人アプリ開発 写真投稿機能作成

Gemのインストール

railsで画像をアップロードする機能を実装するのに、下記gemを使用しました。

Carrierwave
画像をアップロードするために必要な機能を追加するためのgem

Minimagick
画像に対して、画像同士を合成したり、リサイズしたりと編集することができるようになるためのgem

Carrierwaveの導入為に、まず「ImageMagick」がインストール。

$ brew install imagemagick

gemのインストール

# Gemfile
gem 'carrierwave'
gem 'mini_magick'
# terminal
$ bundle install
carrierwaveを利用するためのアップローダーを作成
$ rails g uploader image

app/uploadersディレクトリ以下にimage_uploader.rbが作成される。

// image_uploader.rb
include CarrierWave::MiniMagick  // コメントアウトを外す
process resize_to_fit: [100, 100]  // 追記
imageモデルの作成
rails g model image
モデルの編集
// groups.rb
has_many :images
// image.rb
mount_uploader :image, ImageUploader
belongs_to :group
フォームが表示されない

次にviewの作成に入りました。
最初に下記のように記述。

# _form.html.haml
# ーー追加ーー
= f.fields_for :images do |i|
  = i.file_field :image, class: "#"

ただここでフォームが表示されない躓きが。
調べたところ、fields_for の第2引数に子モデルのインスタンスを渡してあげないといけなかった。

# [修正]_form.html.haml
= f.fields_for :images @group.images.build
 do |i|
  = i.file_field :image, class: "#"

▶︎無事フォームは表示されるようになりました。

画像が保存されない

まずbinding.pryをcontrollerのcreateメソッドの中に入れて、デバッグしてみる。
→送られては来ている。。。
ここでストロングパラメーターを変更していないことに気づき、編集。

def group_params
    params.require(:group).permit(:name, :catchphrase, :title, :text, :area, images_attributes: [:image])
end

▶︎無事保存されるようになりました。

画像が1つしか保存されない

今回は入力欄を4つ用意しているが、なぜか1つしか保存されていない。

ここについては明日以降調査していきます。