在Ruby on Rails应用程序中尽可能做到尽可能干净


0

我目前使用Rails应用程序的awesome attachment-fu插件,但作为新手开发人员,我从未遇到过像我找到的那种场景我自己英寸

本质上,我在两个级别上使用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

妈的,这是聪明的,非常感谢! 30 6月. 092009-06-30 18:25:07


0

对于它的价值,我认为Patrick Berkeley在处理多个附件方面做得很好,尽管回形针插件。他在这里阐述了他的工作:

http://gist.github.com/33011