2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

carrier waveの基本的な使い方

Posted at

Gemfileにcarrierwave追加

# gem
gem 'carrierwave', '~> 2.0'

アップローダークラスの生成

bundle exec rails g uploader アップローダー名
# bundle exec rails g uploader Image

デフォルトでstorage :fileが指定されているので、アップロードしたファイルはpublic/配下に保存されます。保存されるディレクトリは、store_dirで設定されます。

余談ですが、保存先は以下のstore/dirです。

app/uploaders/image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base
.
.
.

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def extension_whitelist
    %w(png jpg)
  end

  def filename
    original_filename if original_filename
  end
end

もし、例えばS3に変更したい場合は、'fog'というgemをインストールした上で、以下のファイルの設定を変更する。

config/initializers/carrierwave.rb
unless Rails.env.development? || Rails.env.test?
  CarrierWave.configure do |config|
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: 'XXXXXXXX',
      aws_secret_access_key: 'XXXXXXXXXXXXXXXXXXX',
      region: 'ap-northeast-1'
    }

    config.fog_directory  = 'rails-photo-123'
    config.cache_storage = :fog
  end
end

アップロード画像のカラムを追加

続いて、アップロード画像を保存したいモデルにカラムを追加する。

bundle exec rails g migration add_カラム名_to_users カラム名:string
# bundle exec rails g migration add_picture_to_users picture:string

このカラムには、「画像のデータ」ではなく「画像のファイル名」を保存します。カラムを追加する際もstringを指定するようにしましょう。

アップローダークラスとカラムの紐づけ

最後にアップローダークラスとカラム名を紐づければおわりです。簡単...

class モデル名 < ActiveRecord::Base
  mount_uploader [:カラム名], [アップローダークラス]
  # mount_uploader picture,Image
end
2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?