Ruby on Rails App에서 가능한 한 건조하게하기


0

저는 Rails 앱에 대해 가장 멋진 attachment-fu 플러그인을 사용하고 있습니다.하지만 초보 개발자로서 나는 찾은 것과 같은 시나리오를 본 적이 없었습니다 나만.

기본적으로 나는 attachment-fu 플러그인을 두 단계로 사용하고 있습니다.

  1. 사용자 등급에 사용자 아바타 용입니다.
  2. 메시징 시스템에서 첨부 파일 (PDF 등)을 허용하는 것입니다.

내 질문을 최대한 활용 연습 DRY, 명확하고 일관성을 유지하기 위해 이러한 상황에서 될 것입니다.

분명히 두 클래스 모두에서 플러그인을 정의하고 실행하는 것은 의미가 없지만 신의 Application 클래스에서 모든 것을 설정하는 것에 대해 나에게 이상한 (무언가) 것이 있습니다.

사이에 뭔가가 있습니까, 아니면 부모 클래스가 가야할까요?

감사합니다.

1

부모 클래스를 사용하여 응용 프로그램에서 실제로 첨부 파일을 사용하려는 여러 가지 방법으로 서브 클래 싱을 사용합니다. 사용할 수있는 가장 DRYest 한 솔루션이 아닐 수도 있지만 논리적 인 패턴을 선호합니다.


2

"아웃소싱"아바타 지원은 전적으로 Gravatar의 옵션입니까? Gravatar가 호스팅하는 아바타를 표시하는 일부 레일스 플러그인이 있습니다. 휠을 다시 발명 할 필요는 없습니다.


3

attachment_fu 설정을 두 번 정의하면 DRY 문제가 발생합니까?

파일이 같은 유형이고 같은 위치에 저장되어 있지 않으면 구성에서 아무 것도 반복하지 않을 것입니다.

물론, (한 당신의 아바타에 대한 선언 등 당신의 PDF의

이 첨부 파일을 처리하는 코드의

99.99 %가 묻혀됩니다에 대한 다른 두 has_attachment 선언을해야하지만, 옵션은 대부분 다릅니다 attachment_fu libs, 귀하의 구성 코드는 기본적으로 꽤 건조해야합니다 =)


0

Polymorphic Associations을 사용할 수 없습니까?

나는 attachment_fu로 내 응용 프로그램에서이 문제에 봉착하고 있습니다. attachment_fu에서는 확실하지 않지만 이전의 학교에서는 File Column 플러그인에 대해 Polymorphic Associations을 사용합니다.

내 "파일"모델은 다음과 같습니다 파일 열이 더 이상 소용 없다

class Company < ActiveRecord::Base 
     has_many :file_uploads, :as => :fileable 
    end 

이 사파리에 borks 같이

class FileUpload < ActiveRecord::Base 
     belongs_to :fileable, :polymorphic => true 
     file_column :name 
    end 

과 같은 다음 첨부 파일을 필요한 모델이 될 것이다 3.x이며 더 이상 유지되지 않습니다. 그것은 좋았고 단순했다. .. 아아, 좋은 옛날. ..


2

wfarr이 설명하는 내용은 single table inheritance이며 현재이 상황에서 수행하고 있습니다. 나는 필요한 모든 attachment_fu 열과 실제 모델 이름을 보유 할 type이라는 추가 열을 포함하는 Assets에 대해 하나의 테이블을 가지고 있습니다.

asset.rb :

class Asset < ActiveRecord::Base 
    ... attachment_fu logic ... 
end 

avatar.rb :

class Avatar < Asset 
    ... avatar specific attachment_fu logic ... 
end 

pdf.rb :

나는 자산 상속 특정 업로드 유형 자산과 추가 모델에 대한 모델을
class PDF < Asset 
    ... PDF specific attachment_fu logic ... 
end 
  0

젠장, 즉 똑똑, 고마워요! 30 jun. 092009-06-30 18:25:07


0

패트릭 버클리 (Patrick Berkeley)는 여러 가지 첨부 파일을 처리하는 데 좋은 성과를 거뒀다고 생각합니다. Paperclip 플러그인을 사용하십시오. 그는 여기에 그의 작품을 설명한 것 :

http://gist.github.com/33011