3

サインアップ時にデフォルトのプロフィール写真が設定されていない場合、デフォルトのプロフィール写真をレンダリングするためのヘルパーメソッドに固執しています。私がそのようなヘルパーメソッドを持っているとしましょう:

def blank_image (user)
  base_image = ""
  if @user.image.empty?
    base_image
  else
    @user.image
  end
end

base_image必要なのは、この画像を保存する場所がわかるように指すURLです。アセット/画像を推測していますが、意味がある場合は画像の場所を「スペルアウト」する方法がわかりません。また、これを自分の見解でどのように実装できますか。前もって感謝します。

4

1 に答える 1

6

このようなもの?

def blank_image.url(user)
  if @user.image.empty?
    "/assets/default_photo.jpg"
  else
    @user.image.url
  end
end

アセット上の画像は、プリコンパイルされると、/アセット(スタイルシートやJavaScriptと同じ)から利用できるようになり、「/images」パスが削除されます。


新しいコメントに基づいて、最善の解決策は、Carrierwaveのdefault_urlを提供することかもしれません。ドキュメントを確認すると、次のようなことができます。

class MyUploader < CarrierWave::Uploader::Base

  version :thumb do
    process resize_to_fill: [280, 280]
  end

  version :small_thumb, :from_version => :thumb do
    process resize_to_fill: [20, 20]
  end   

  def default_url
    "/assets/default_images/" + [version_name, "default.png"].compact.join('_')
  end
end

次に、/ app / asserts / images / default_images /に写真を追加して、デフォルトの画像であるdefault.png、バージョン:thumbであるthumb_default.png、最後にバージョン:であるsmall_thumb_default.pngファイルを作成する必要があります。 small_thumb。

アップロードされた画像に対して異なる画像バージョンを処理する場合の例として、:thumbと:small_thumbの両方があることに注意してください。

于 2013-03-03T23:10:27.143 に答える