0

我有 3 个模型应该有与之关联的图像:

Program.rb
Episode.rb
Gallery.rb

它们中的任何一个都需要具有不同的图像尺寸。例如:

Program -> 100x100 , 250x400 , 500x400
Episode -> 222x450 , 210x330 , 1000x1200
Gallery -> 100x100 , 500x400 , 1000x1200

首先,我认为模型(Paperclip 的助手)的polymorphic关联就足够了。像这样:Picturehas_attached_file

class Picture < ActiveRecord::Base

has_many :imageable, :polypmorphic=> :true
has_attached_file :image, :styles => {... :program1 => "100x100>", :program2 => "250x400>", :episode1=>"222x450" , :episode2=>"210x330" , :gallery1=>"100x100" , :gallery2=>"500x400" ....  }
# There are almost 10 different styles for different models...
end

通过这种方式,我可以像这样使用图像:

@program.pictures.first.image[:program1]
@episode.pictures.second.image[:episode2]
..
.

但我不认为它是有效的?是吗?

处理这种需求的最佳策略是什么?

我应该如何建立我的联想和回形针?

例如,为每个模型设置回形针是否更好?

我认为在一张桌子内收集所有图像会是一个好习惯吗?

你怎么看?

这实际上应该是一个普遍的问题?不是吗?

谢谢

4

1 回答 1

0

就个人而言,我不会在多态模型上添加附件,除非它们都需要完全相同的尺寸。即使那样,我仍然可能不会。不过,有些人的业务需求是他们所有的图像都应该放在一张桌子上,所以他们的选择可能会有所不同。

但在你的情况下,它听起来不像。我肯定会把你的附件直接放在给定的模型上。附件最需要的是一列(尽管您可以拥有更多)。你的Imageable班级在做什么?它实际上只是保存数据,而不是行为(行为实际上在 Paperclip 内部,并且与持久性相关而不是业务逻辑,因此应该像 AR 一样对待)。

最后,将一张图像上传到Episode模型需要 9 次额外的转换,这意味着 9 次其他调用convert和 9 次额外的文件保存(如果我们正在谈论网络存储,则非常慢),所有这些都必须在请求期间发生,让用户等待。

于 2013-08-21T17:35:53.223 回答