2008-08-21 92 views
0

我目前使用Rails應用程序的awesome attachment-fu插件,但作爲新手開發人員,我從未遇到過像我找到的那種場景我自己英寸在Ruby on Rails應用程序中儘可能做到儘可能乾淨

本質上,我在兩個級別上使用attachment-fu插件。

  1. 用於用戶類中的用戶頭像。
  2. 是在郵件系統中允許文件附件(PDF等)。

我的問題是物盡其用的做法是在這些情況下如何保持DRY,明確和一致的。

顯然,在兩個類中定義和執行插件都沒有意義,但對於我而言(有可能是毫無根據的)關於繼續並將其全部置於敬虔的應用程序類中是非常奇怪的。

在兩者之間是否存在某種東西,還是父類是要走的路?

謝謝!

回答

1

我會傾向於使用一個父類,並以您打算在應用程序中實際使用附件的不同方式進行子類化。它可能不是可用的DRYest解決方案,但它適用於一個合理的模式。

2

是否將「外包」頭像全部支持到Gravatar一個選項?有一些Rails插件會顯示由Gravatar託管的頭像。你可能不需要在那裏重新發明輪子。

3

什麼是定義attachment_fu設置兩次的DRY問題?

除非文件的類型相同並且存儲在同一個地方,否則您不會在配置中重複任何操作。

當然,你有兩個has_attachment聲明,但該選項將主要不同(你化身一個聲明,另一個是你的PDF等

代碼來處理附件的

99.99%將被安葬在attachment_fu庫,你的配置代碼默認應該是相當乾的=)

0

難道你不能使用Polymorphic Associations

我即將在attachment_fu的應用中打這個,所以我不完全確定attachment_fu,但對於老派File Column插件,我會使用Polymorphic Associations。

我的「文件」的模式將是:

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

,然後在需要的文件附件的任何模型將是這樣的:

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

文件欄是沒有好了,因爲它borks上的Safari 3.x並不再維護。儘管......很好,很簡單......啊,過去的好日子......

2

wfarr描述的是single table inheritance,這是我目前在這種情況下所做的。我有一個Assets的表格,其中包含所有必要的attachment_fu列,還有一個名爲type的額外列,它將保存實際的模型名稱。我有資產和其他模型的特定上傳類型,從資產繼承模型:

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

媽的,這是聰明的,非常感謝! – dolzenko 2009-06-30 18:25:07

0

對於它的價值,我認爲Patrick Berkeley在處理多個附件方面做得很好,儘管回形針插件。他在這裏闡述了他的工作:

http://gist.github.com/33011

相關問題