セキュリティ系の勉強、その他開発メモとか雑談. GithubはUnity触っていた頃ものがメイン Twitterフォローもよろしくです

CarrierWave デフォルトの画像を表示する default_url

前置き

下のページで画像をアップロードする機能は実装済【Rails】CarrierWaveとrmagickで画像アップロード機能を作る | おすすめのプログラミングスクール比較!最短で上達するなら?

画像が保存されていない場合のデフォルトの画像を呼び出したい

default_urlというメソッドが用意されています。これを$ rails g uploader imageで生成したクラスに実装する事で、自分が設定したいデフォルトの画像を呼び出すことが可能です。 github.com

class ImageUploader < CarrierWave::Uploader::Base
  def default_url(*args)
    "/images/" + [version_name, "default.png"].compact.join('_')
  end
end

この場合、/public/images/下に画像を保存しておく

呼び出し方

下の様に呼び出す際に、imagenilか判断して自動で呼ばれます。

current_user.image.url

画像の名前はdefault.pngにしておく。

サイズ指定

一番上の参考リンク通りに実装した場合、下の様な実装になっているはず。

class ImageUploader < CarrierWave::Uploader::Base  
 
 # リサイズしたり画像形式を変更するのに必要
  include CarrierWave::RMagick
 
 # 画像の上限を640x480にする
  process :resize_to_limit => [640, 480]
 
  # 保存形式をJPGにする
  process :convert => 'jpg'
 
  # サムネイルを生成する設定
  version :thumb do
    process :resize_to_limit => [300, 300]
  end
   
  version :thumb100 do
    process :resize_to_limit => [100, 100]
  end
 
  version :thumb30 do
    process :resize_to_limit => [30, 30]
  end
....
end

そして次の様に呼ぶことで、リサイズした画像のurlを取得できる。

current_user.image.thumb20.url

この時、default_url側に渡される名前はthumb20"+"default.pngとなるため、サイズの指定も可能になる。つまりファイル名をthumb20_default.pngとしておく。