18

나는 다음과 같습니다 사람의 아바타에 URL을 반환하는 방법과 모델을 가지고 :모델에서 자산 파이프 라인의 이미지를 어떻게 참조 할 수 있습니까?

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

나는 이제 하드 코딩 없음 이미지의 요구가있을 3.1로 업그레이드의 중간에있어 자산 파이프 라인을 통해 참조됩니다. 컨트롤러 또는 뷰에서, 난 그냥 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

개인적으로 볼 때 뷰의 세부 사항이므로이 기본값을 모델에 넣지 않아야한다고 생각합니다. 당신의 (HAML)보기에서 :

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

또는, 그래서처럼 자신의 도우미를 작성하고 사용

이 같은 일이 레일에서 어려운
= 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