#CarrierWaveとは
ファイルアップロードを簡単に追加することができるgemです。
#CarrierWaveのインストール
Gemfile
に以下を追記した後、コマンドを実行してgemをインストールします。
gem 'carrierwave'
$ bundle install
#アップローダーの作成
rails g uploader アップローダー名
をコマンドで実行すると、 app/uploaders/image_uploader.rb
ファイルが作成されます。
今回は、アップローダー名を image
にしています。
$ rails g uploader image
#モデルとの紐付け
mount_uploader :アップローダー名, クラス名
を関連づけるモデルに追加していきます。
class Post < ApplicationRecord
mount_uploader :image, ImageUploader
end
#コントローラーの編集
画像をアップするためのコントローラーを作成します。
画像のアップロードを意識せず、いつも通り作成します。
テキストと画像のカラムがあるので、ストロングパラメーターを以下のように記述しています。
class PostsController < ApplicationController
private
def post_params
params.permit(:image, :content)
end
end
#viewの編集
画像をアップするためのフォームを作成します。
画像のアップロードを意識せず、いつも通り作成します。
例えばこんな感じになります。
<%= form_with url: "/posts/create" do |f| %>
<div class="form">
<%= f.label "写真の投稿" %><br>
<%= f.file_field :image %><br>
<%= f.text_area :content, value: @post.content %><br>
<%= f.submit "投稿" %>
</div>
<% end %>
このフォームを使って画像をアップすると、 public/uploads
フォルダに画像が保存されます。
<% if @user.image? %>
を追加すると、画像を設定したかどうかを確かめ、画像を設定した時としていない時で条件分岐することもできます。
#保存した画像を表示させる
保存した画像を表示させる場合は、 image_tag
で呼び出します。
<%= image_tag @post.image_url %>
if @post.image?
を追加すると、画像がない時にエラーが出るのを防げます。
<%= image_tag @post.image_url if @post.image? %>