2012-04-11 25 views
4

私はこれを正しく理解しているとは思わないが、ユーザーにデフォルトのイメージを与えるにはどうすればよいですか?rails carrierwave default_url not working

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

私のimages/fallbackディレクトリには、「default.png」というイメージがあります。オンラインで見ても、人々はversion_nameを 'tiny'のようなものに変更しますが、それは私にとってもうまくいかないようです。どうしたの?バージョン名は正確に何ですか?

私は

def default_url 
     "/images/fallback/default.png" 
    end 

のようなものを試してみましたが、それはどちらか動作しません。私は何を誤解していますか?感謝! ありがとう!

編集:例えば

class ImageUploader < CarrierWave::Uploader::Base 

    # Include RMagick or MiniMagick support: 
    include CarrierWave::RMagick 

    storage :file 

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

    # Provide a default URL as a default if there hasn't been a file uploaded: 
    def default_url 
     ??????? 
    end 

    # Create different versions of your uploaded files: 
    version :thumb do 
    process :resize_to_fill => [80, 80] 
    end 

end 





class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :name, :email, :password, :password_confirmation, 
    :remember_me, :image, :remote_image_url, :image_cache 

    mount_uploader :image, ImageUploader 
end 

答えて

4

あなたはこのようなアップローダー持っている:small_thumbバージョンパスのために、元の画像の略/images/fallback/default.png

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 
     "/images/fallback/" + [version_name, "default.png"].compact.join('_') 
    end 
end 

がそうで/images/fallback/small_thumb_default.pngある、とし。

あなたがイメージが実際に処理した後に保存し、パスをしたい場合は、あなたがあなたのファイルパスに「画像」を含める必要はありませんアセットパイプラインを使用している場合は、store_dir

def store_dir 
    'public/my/upload/directory' 
    end 
+0

どれを正確に参照するのですか?私はまだちょっと混乱しています。私はdefault_urlが、親指からどこでもデフォルトのイメージを参照する場所だと思っていました。私は最初に他の場所に既定のイメージを配置するはずですか? 私は通常、私のバージョン:thumbから画像を使用していますが、thumb_pathを試しましたが、正しいとは思われません。 – Sasha

+0

@Crystalのデフォルト画像は、要求された画像を見つけることができませんでした。たとえば、small_thumbを削除すると、carrierwaveがsmall_thumb_default.pngを表示します。すべての画像が常に適切に配置されていることが確実な場合は、デフォルト画像を使用しないでください。 –

+0

hmmm、まだそれほど動作していません。私はサインアップ登録フォームを持っており、ユーザーがサインアップするときに、少なくともユーザーがそれを変更するまで、デフォルトのイメージを表示したいと思っています。私はサインアップした後、私のデータベースをチェックし、私の「イメージ」の列はまだヌルです。もし私が手動で自分のプロフィール画像を画像に変更すると、その「画像」列はデータを取得します。ユーザーが最初にサインアップすると、基本的に 'image.'列の 'default.png'データを持つ方法がありますか? – Sasha

11

が必要image_tag理由assets/imagesフォルダに自動的にルーティングされ、そこでファイル名が検索されます。したがって、default_urlメソッドで必要なパスは、imagesフォルダの後ろにあるものです。私の場合は、画像フォルダにサブフォルダがなかったのでdefault.pngだけでした。

def default_url 
     'default.png' 
    end