gpt4 book ai didi

ruby-on-rails-5 - 当用户下载 ActiveStorage Blob 附件时如何更新数据库?

转载 作者:行者123 更新时间:2023-12-03 17:29:34 26 4
gpt4 key购买 nike

目前,用户可以使用以下链接在我的应用程序中下载 ActiveStorage blob:

link_to 'download', rails_blob_path(pj.document.file, disposition: 'attachment')

但是,我想更新数据库中的属性,以便在首次下载文件时注册关联模型。该字段称为downloaded_at 字段。

我做了以下尝试:
  • 在我更新模型时更改了 link_to > button_to。
  • 添加了合适的路由
  • 在数据库中添加如下代码:
    def download
    @proofreading_job = ProofreadingJob.find(params[:id])
    @proofreading_job.update(downloaded_at: Time.current) if current_user == @proofreading_job.proofreader.user
    response.headers["Content-Type"] = @proofreading_job.document.file.content_type
    response.headers["Content-Disposition"] = "attachment; #{@proofreading_job.document.file.filename.parameters}"

    @proofreading_job.document.file.download do |chunk|
    response.stream.write(chunk)
    end
    ensure
    response.stream.close
    end

  • 但是,除了重定向到我不想要的@proofreading_job 页面之外,这并没有做任何事情。

    有没有人以前做过这个,如果有,我怎么能完成这个任务。

    最佳答案

    我想你也可以尝试使用你的 Action Controller 作为代理,概念是这样的:

  • 在您的操作中下载文件
  • 检查是否下载成功以及其他验证
  • 执行清理操作(在您的情况下是 #3 中添加的代码)
  • 使用 send_data/send_file 将文件发送回用户渲染方法

  • 例如。在您的 Controller 中:
    def download
    file = open(params[:uri])
    validate!
    cleanup!
    send_file file.path
    end

    那么在你看来:
    link_to 'download', your_controller_path

    以上只是概念,我很抱歉只提前提供了伪代码。

    关于ruby-on-rails-5 - 当用户下载 ActiveStorage Blob 附件时如何更新数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56912884/

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