LoginSignup
0
0

More than 3 years have passed since last update.

[Ruby on Rails] CarrierWaveの使い方

Last updated at Posted at 2020-12-26

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? %>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0