【问题标题】:How to setup Paperclip and associations for multiple models?如何为多个模型设置回形针和关联?
【发布时间】:2013-08-20 10:21:12
【问题描述】:

我有 3 个模型应该有相关的图像:

Program.rb
Episode.rb
Gallery.rb

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

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

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

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]
..
.

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

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

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

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

我认为在一张桌子上收集所有图像是一种好习惯?

你怎么看?

这实际上应该是一个常见的问题?不是吗?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 paperclip ruby-on-rails-4


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢您考虑我的邮件并回答 Jon 的问题。我很欣赏它。
    猜你喜欢
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多