セキュリティ系の勉強・その他開発メモとか雑談. 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としておく。