個人アプリ開発 写真投稿機能作成
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つしか保存されていない。
ここについては明日以降調査していきます。