Ruby on rails 将通过Carrierwave_Direct上载的文件与对象关联

Ruby on rails 将通过Carrierwave_Direct上载的文件与对象关联,ruby-on-rails,amazon-s3,carrierwave,Ruby On Rails,Amazon S3,Carrierwave,我正在使用carrierwave_direct gem将文件直接上传到S3,一切都进展顺利。但是,当amazon重定向回success\u action\u redirect中指定的URL时,我并没有将上传的文件与对象关联 我的控制器看起来像 def edit @excel_version = ExcelVersion.find(params[:id]) @uploader = @excel_version.excel_everest_macro @uploader.success_

我正在使用carrierwave_direct gem将文件直接上传到S3,一切都进展顺利。但是,当amazon重定向回success\u action\u redirect中指定的URL时,我并没有将上传的文件与对象关联

我的控制器看起来像

def edit
  @excel_version = ExcelVersion.find(params[:id])
  @uploader = @excel_version.excel_everest_macro
  @uploader.success_action_redirect = edit_admin_excel_version_url
end


def update
  @excel_version = ExcelVersion.find(params[:id])
  @excel_version.assign_attributes(params[:excel_version])
  @excel_version.save
end
我的视图中有一个隐藏的表单字段 =表格(适用于@excel)版本do |表格| =form.hidden_字段:键

因此,在我的更新操作中,我只使用@excel\u version.assign\u attributes参数[:excel\u version] Amazon返回的密钥可以很好地进入模型。但是,安装在@excel\u版本对象上的上传程序没有获取url,我无法设置链接以下载该文件

关于如何使用返回给我的S3参数来像carrierwave通常所做的那样将文件与模型关联,有什么建议吗

谢谢


另外,这里的另一个答案是建议阅读github上的carrier_wave direct文档,我发现这在这方面没有帮助。

要将图像与模型关联,您可以做的是在控制器中创建一个方法,该方法将使用来自amazon的参数并创建图像链接

比如你能做什么-

  def image_url
    respond_to do |format|
      format.json { render :json => { :filelink => "https://s3.amazonaws.com/#{params[:bucket]}/#{params[:key]}" } }
    end
  end
这段代码将要做的是,当amazon成功重定向到image_url方法时,它将使用参数bucket和key创建到您的图像的精确链接。发送的参数既有key,也有bucket名称

现在,您可以将此图像url放在视图的隐藏对象中,这样当表单发布到服务器时,url也会随之发布。您可以将其与模型关联


希望这有帮助。它对我很有效。

所以我的问题是我的隐藏字段:key字段的格式不对。我错误地将@uploader表单的字段放在直接上传表单上,该表单将文件上传到S3

当然,您需要表单上的:key字段,用户在将文件发布到s3ie后返回该字段,url传递给success\u action\u redirect方法。在那里,S3将返回参数中的键,您可以将其与您的模型相关联


谢谢你所有有用的建议

关于返回的:key值,您能提供更多的信息吗?您是否成功地将键值保存到@excel\u版本?如果是这样的话,为什么下载时会出现问题?如果你有钥匙,那么你应该有适当的URL链接到上传的文件…与更多信息也许我可以帮助谢谢分享。您能否演示如何完成最后一步:将filelink分配给表单中的隐藏字段?