gpt4 book ai didi

ruby-on-rails - rails : Paperclip & previews?

转载 作者:行者123 更新时间:2023-12-03 13:29:50 24 4
gpt4 key购买 nike

你知道在某些网站上,当你被要求上传头像时,你点击按钮,选择你的文件,然后点击确定,但是 之前 您提交页面(如,没有创建/更新记录),显示图像的小预览?

我将如何使用 Paperclip 完成此任务对于 Rails?

任何可以将我指向教程或可能告诉我如何在保存记录之前对图像进行 Javascript 裁剪的人的奖励积分。

我在谷歌上找不到太多关于这个主题的东西……谢谢你的帮助!

最佳答案

从 Rails 的角度来看,这种事情是有问题的,因为图像上传的工作方式。使其更好地工作的一种策略是:

  • 为您的图片上传制作一个子表单,可能使用 swfupload使其更加精简。
  • 创建一个模型来接收您的上传,其中包括一些用于检索和链接它的随机访问 key 。回形针处理附加的文件。
  • 当子表单完成时,使用 AJAX 通过插入隐藏字段或可能具有适当 unique_key 的可见复选框元素来填充主表单。

  • 一个典型的模型如下所示:
    class Avatar < ActiveRecord::Base
    has_attached_file :image
    # ... Additional Paperclip options here

    before_validation :assign_unique_key

    belongs_to :user

    def to_param
    self.unique_key
    end

    protected
    def assign_unique_key
    return if (self.unique_key.present?)

    self.unique_key = Digest::SHA1.hexdigest(ActiveSupport::SecureRandom.random_number(1<<512).to_s)
    end
    end

    unique_key 字段的原因是您可以将其链接到可能未保存的记录的形式。将其放入 URL 时使用 unique_key 而不是 id 是有利的,因为在上传时很难判断用户是否应该能够看到这张图片,因为可能尚未分配所有者用户。

    这也可以防止好奇的人在您的 URL 中更改某种顺序的、容易猜到的 ID 并查看其他已上传的头像。

    此时,您可以像检索任何模型一样检索 Avatar 的最终调整大小的缩略图 URL。

    您可以轻松地将收据上的参数剥离并转换回 Avatar ID 号:
    # If an avatar_id parameter has been assigned...
    if (params[:user][:avatar_id])
    # ...resolve this as if it were a unique_key value...
    avatar = Avatar.find_by_unique_key(params[:user][:avatar_id])
    # ...and repopulate the parameters if it has been found.
    params[:user][:avatar_id] = (avatar && avatar.id)
    end

    # ... params[:user] used as required for create or update

    随着人们上传和重新上传图像,您最终将拥有大量实际上并未在任何地方使用的孤立记录。在经过一段合理的时间后,编写一个 rake 任务来清除所有这些是很简单的。例如:
    task :purge_orphan_avatars => :environment do
    # Clear out any Avatar records that have not been assigned to a particular
    # user within the span of two days.
    Avatar.destroy_all([ 'created_at<? AND user_id IS NULL', 2.days.ago ])
    end

    使用 destroy_all也应该具有清除所有回形针 Material 的效果。

    关于ruby-on-rails - rails : Paperclip & previews?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2232008/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com