18

私はこのようになり、人のアバターにURLを返すメソッドを持つモデルがあります:私は、3.1へのアップグレードの真っ只中にいるよ、今ハードコードされたなしの画像のニーズがあることモデルからアセットパイプラインの画像を参照するにはどうすればよいですか?

def avatar_url 
    if self.avatar? 
    self.avatar.url # This uses paperclip 
    else 
    "/images/avatars/none.png" 
    end 
end 

をアセットパイプラインを通じて参照されます。コントローラまたはビューでは、私はimage_path()にラップしますが、モデルにはそのオプションはありません。イメージに正しいURLを生成するにはどうすればよいですか?

+0

別のオプション:http://stackoverflow.com/questions/9646549/default-url-in-paperclip-broke-with-asset-pipeline-upgrade – James

答えて

6

draper:https://github.com/jcasimir/draperを使用してこの問題を解決しました。 Draperでは、ヘルパーにアクセスできる(ビューでの使用のために)モデルの周りにラッパーを追加しました。

+1

良い提案です。この宝石は有望に見えます。 – lucapette

+0

Draperは、上記の@iainと同じヘルパーメソッドに簡単にアクセスできるようにします。あなたがヘルパーにアクセスできるようにDraperを導入するのは残酷ですが、他のロジックをプレゼンターに移すことが理にかなっているなら、それを確信してください。 – Lenart

6

個人的には、ビューの詳細なので、このデフォルトをモデルに入れるべきではないと思います。

= image_tag(@image.avatar_url || 'none.png') 

または、独自のヘルパーを作成し、そのようにそれを使用します:あなたの(HAML)ビューでは、このようなものがレールに困難なとき

= avatar_or_default(@image) 

、それは多くの場合、それは正確ではない兆候です右。

+3

私はよくjsonで(as_json経由で)使用します。そのオプションを離れて。 –

2

ペーパークリップは、あなたがアバターをアップロードしていない場合、ユーザーには「デフォルトの画像を提供するためにこれを使用することができますデフォルトのURL

has_attached_file :avatar, :default_url => '/images/.../missing_:style.png' 

を指定するオプションがあります。

+0

残念ながら、default_urlパラメータはアセットパイプラインヘルパーを介して処理されません。 –

+13

':default_url => ActionController :: Base.helpers.image_path("/default_avatar.png ")' – Hengjie

19

私はこの権利をしばらく取得することに苦労したので、私はここに回答を投稿すると思った。上記は標準的なデフォルト画像(各クリップスタイルごとに同じもの)に対して機能しますが、複数のデフォルトスタイルが必要な場合は別の方法が必要です。

アセットパイプラインとアセットの同期でデフォルトのURL再生を行い、スタイルごとに異なるデフォルト画像が必要な場合は、指紋を付けずにアセットパスを生成する必要があります。そうしないと、多くのAssetNotPrecompiledエラーが発生します。

:default_url => ActionController::Base.helpers.asset_path("/missing/:style.png", :digest => false) 

したり、クリップのオプションで:そうのよう

その後、

:default_url => lambda { |a| "#{a.instance.create_default_url}" } 

とクリップの添付ファイルを持っているモデルでインスタンスメソッド:この中

def create_default_url 
    ActionController::Base.helpers.asset_path("/missing/:style.png", :digest => false) 
end 

あなたはまだ補間(:スタイル)を使うことができますが、アセットの指紋/消化をオフにする必要があります。

ダイジェストなしのアセットとダイジェスト付きのアセットを同期している限り、これはすべて正常に機能しているようです。

+1

Rails 4、Paperclip、これはもう必要ありません。 ':default_url =>":style/missing.jpg "'。先頭に '/'はありません。 – nitsujri

関連する問題