OKADA LABO

paperclip

paperclipを使って画像のアップロード機能をつける

1.paperclipをインストールする
paperclipを使うにはImageMagickという画像変換ツールをパソコン内にインストールする必要があります

$ which convert
/usr/local/bin/convert # このようにパスが表示されていればImageMagickのインストールは完了しています

brew install imagemagick
gem 'paperclip'

$ bundle install

ではgemを新しくインストールしたのでサーバーを再起動しましょう。

2.usersテーブルにpaperclip用のカラムを追加する
$ rails g paperclip モデル名 カラム名
#usersテーブルにavatarカラムを追加するためのマイグレーションファイルを作成
$ rails g paperclip user avatar
#マイグレーションファイルの実行
$ bundle exec rake db:migrate
3.userモデルにpaperclipの設定を追記する

has_attached_file

has_attached_fileでは画像用のカラムのサイズやデフォルト画像、画像ファイルの保存先を設定できます。今回はサイズをだけ指定します。

class モデル名 < ActiveRecord::Base

has_attached_file :カラム名,
styles: { medium: "画像サイズ", thumb: "画像サイズ" }

has_attached_fileのあとにはまず、カラム名を続けます。その後サイズの指定をします。今回はカラム名はavatarにしたので以下のようになります。

class モデル名 < ActiveRecord::Base

has_attached_file :avatar,
styles: { medium: "画像サイズ", thumb: "画像サイズ" }

サイズを指定するための属性はstylesです。stylesではどのような種類の画像をどの大きさで保存するか指定します。「medium」や「thumb」はImageMagickで保存できる画像の種類です。

画像サイズの指定はImageMagickでの指定方法に準じます。以下のような指定方法があります。

画像サイズの指定方法

指定方法 備考
100×100 横100px、縦100pxの画像(アスペクト比を保つ)
100×100! アスペクト比を無視
100×100> 一番長い辺を100pxにするようにリサイズ(アスペクト比を保つ)
100×100^ 一番短い辺を100pxにするようにリサイズ(アスペクト比を保つ)
100×100# アスペクト比を保ち一番短い辺を100pxにするようにリサイズし、画像を中央によせ、はみ出た部分は切り取る
「x」は「半角英字の小文字のエックス」です
validates_attachment_content_type

validates_attachment_content_typeは画像のバリデーションを設定します。サイズや画像の種類でバリデーションが可能です。今回は画像の種類だけ指定します。
jpegとpngを許可する場合
class モデル < ActiveRecord::Base

validates_attachment_content_type :カラム名,
content_type: ["image/jpeg", "image/png"]

$ rails c

# ユーザーモデルのインスタンスを生成
> user = User.new
# avatarの設定
> user.avatar = File.new("app/assets/images/①で設置した画像ファイル名", "r")
# 設定されているか確認
> p user.avatar
p user.avatarでの出力例
(出力したときに入力する場所が「:」となり、文字が打てなくなった人はこのステップの最後の を読んでください)
qおす

avatarの設定のときに出てきたFile.new("app/assets/images/画像ファイル名", "r")は、画像データを生成するためのものです。File.newで設定するパスは以下のディレクトリに入れた画像を指し示します。