2016-06-14 4 views
0

私はcarrierwaveを画像アップロードに使用していますが、image_uploader.rbのvar 'current_user'へのアクセス権がないため、性別に基づいてデフォルトの画像を設定できません画像のURLは(作成または更新後に)nilですが、そこには問題がありますか?デフォルトの画像を性別に合わせて設定 - Carrierwave&Device

アップローダ/ image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base 
def default_url 
    if (current_user.gender == "Male") 
    ActionController::Base.helpers.asset_path("fallback/" + [version_name, "male.PNG"].compact.join('_')) 
    else 
    ActionController::Base.helpers.asset_path("fallback/" + [version_name, "female.PNG"].compact.join('_')) 
    end 
end 
end 

答えて

0

ソリューションは、次に、各img_tag

でこのメソッドを使用するヘルパーに続いて app/assets/images

下写真2枚「男性/ female.png」を追加/ application_helperこの方法

def default_img(user) 
    if user.avatar_url.nil?   
    if (user.gender == "Male") 
     "male.PNG" 
    else 
     "female.PNG" 
    end 
    else 
    user.avatar_url 
    end 
end 

を作成することです

2

image_uploader.rbがモジュールである場合、ユーザ・オブジェクトを渡し、ユーザの性別に基づいて画像を設定する(例えばafter_create)コールバックを使用して、User.rbモデルでそれを呼び出します。このような

何か:

class User < ActiveRecord::Base 
    after_create :set_default_url! 

    def set_default_url! 
    url = ImageUploader.default_url(gender) 
    update!(url: url) 
    end 
end 

次に、あなたのモジュールで:

class ImageUploader < CarrierWave::Uploader::Base 
    def self.default_url(gender) 
    ActionController::Base.helpers.asset_path("fallback/" + [version_name, "#{gender.downcase}.PNG"].compact.join('_')) 
    end 
end 

いくつかのコードは明らかに簡潔にするために省略されました。

+0

'model.gender.downcase'ではないでしょうか? Uploadedは 'model'メソッドで呼び出しレコードにアクセスすると信じています。 – Genzume

+0

'default_url'メソッドに渡される' gender'引数は文字列です。私はユーザオブジェクトを渡すのではなく、 'gender'の値だけを渡しています。 – mmichael

+0

ああ、今私はそれを参照してください。私はこの答えが好きです。それはきれいで簡潔です。 – Genzume

関連する問題