【问题标题】:ruby copy a paperclip attachment from one model to another?红宝石将回形针附件从一个模型复制到另一个模型?
【发布时间】:2012-12-22 20:13:36
【问题描述】:

我有两个这样的模型:-

模型 1 - 卡片 - 包含首页感兴趣数据的表示
附件名称 = cardimage
模型 2 - 用户 - 包含用户
附件名称=头像

当我创作时!一张新卡片,我希望将用户模型中的头像作为新卡片复制到卡片模型中。

是否有一个简单的衬里?

Ruby/Rails/Paperclip

【问题讨论】:

  • 附件需要保存两次吗?如果您的 User 模型与 Card 模型相关联,则可以避免重复。
  • 该示例是从一个用户配置文件复制到另一个。所需要的是将图像复制到不同的模型。
  • 卡模型未关联。它独立用于存储来自任何模型、真实世界数据、推文等的随机信息和图像,用于首页摘要
  • 那么你怎么知道你的头像来自哪个用户,current_user?

标签: ruby-on-rails ruby paperclip


【解决方案1】:

理想情况下,@cih 提到的方法应该有效:

instance_of_model_one.cardimage = instance_of_model_two.avatar
instance_of_model_one.save

但就我而言,它是在 S3 中创建一个空白文件。为了解决这个问题,我尝试了下面的方法并且成功了:

instance_of_model_one.cardimage = instance_of_model_two.avatar.url
instance_of_model_one.save

在第一条语句中传递 URL 而不是对象解决了这个问题。

【讨论】:

    【解决方案2】:

    假设您有 2 个模型:

    • 用户
    • 播放器

    您必须将profile_imageUser with id = 1 复制到Player with id = 10。您可以执行以下操作:

    user = User.find(1)
    player = Player.find(10)
    
    player.profile_image = user.profile_image
    player.save!
    

    有时这可能会保存文件,但文件大小为 0 字节。在这种情况下,请尝试以下操作:

    user = User.find(1)
    player = Player.find(10)
    
    player.profile_image = user.profile_image.url
    player.save!
    

    这应该做的工作!

    【讨论】:

      【解决方案3】:
      old_avatar = model1.avatar;
      model2.avatar.create(attachment: old_avatar.attachment);
      model2.save;
      

      它对我有用。

      【讨论】:

        【解决方案4】:

        这应该可以解决问题,如果模型已关联,您可以使用 after_create 回调,否则我建议在创建卡片的控制器操作中执行此操作。

        instance_of_model_one.cardimage = instance_of_model_two.avatar
        instance_of_model_one.save
        

        【讨论】:

        • 这工作正常。我最初尝试使用文件名,但只是方法是正确的,回形针可以很好地处理其余部分,并使用正确的 id 等。谢谢。
        • 我觉得你需要instance_of_model_two.avatar.dup
        • 不,很确定在这种情况下您不需要dup
        • 附件样式是从原始 url 复制而来,然后重新处理。复制手动重新处理的附件时,会从 original_model.image.url(:original) 复制 new_model.image.url(:thumbnail) 并重新处理。除非保存重新处理参数(例如裁剪) - 不执行重新处理并且所有样式看起来都与原始样式相同。我发现了一个关于它的问题并提供了手动复制的解决方案:stackoverflow.com/questions/17603045/…
        猜你喜欢
        • 2014-04-28
        • 2011-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-10
        • 1970-01-01
        • 2015-11-22
        • 1970-01-01
        相关资源
        最近更新 更多