繁体   English   中英

在Ruby on Rails应用程序中尽可能干燥

[英]Being as DRY as possible in a Ruby on Rails App

我目前正在为Rails应用程序使用很棒的附件插件,但是作为新手开发人员,我从未遇到过像我自己那样的情况。

本质上,我在两个级别上使用attachment-fu插件。

  1. 用于用户类中的用户头像。
  2. 用于允许邮件系统中的文件附件( PDF等)。

我的问题是,在这种情况下,保持DRY透明,一致的最佳用法是什么?

显然,在这两个类中定义和执行插件都是没有意义的,但是对于我来说,继续前进并在虔诚的Application类中进行设置完全有些奇怪(可能是毫无根据的)。

两者之间有什么关系吗,还是父类是路要走?

谢谢!

两次定义attachment_fu设置的DRY问题是什么?

除非文件的类型相同且存储在相同的位置,否则您将不会在配置中重复任何操作。

当然,您将有两个has_attachment声明,但是选项将大不相同(一个用于化身的声明,另一个用于pdf等的声明。

99.99%的用于处理附件的代码将被掩埋在attachment_fu库中,默认情况下,您的配置代码应该是漂亮的DRY =)

“外包”虚拟形象是否完全支持Gravatar 有一些Rails插件可以显示Gravatar托管的头像。 您可能不需要在那里重新发明轮子。

wfarr描述的将是单表继承 ,这是我目前在这种情况下所做的。 我有一个资产表,其中包含所有必需的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

我倾向于使用父类,通过子类化您打算在应用程序中实际使用附件的不同方式。 它可能不是可用的DRYest解决方案,但是,它很适合逻辑模式。

对于它的价值,我认为Patrick Berkeley在通过Paperclip插件处理多个附件方面做得很好。 他在这里概述了他的工作:

http://gist.github.com/33011

您不能使用多态关联吗?

我将在我的应用程序中使用附件_fu来实现这一目标,因此我不确定在附件_fu上的用途,但是对于老派的文件列插件,我将使用多态关联。

我的“文件”模型为:

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

然后任何需要文件附件的模型都将是:

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

File Column不再适用,因为它在Safari 3.x上无法使用,并且不再维护。 虽然很好,也很简单...啊,过去的美好时光...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM