我正在使用carrierwave_direct gem将文件直接上传到S3,一切顺利。但是,当亚马逊重定向回success_action_redirect
中指定的网址时,我并未将上传的文件与该对象相关联。
我的控制器看起来像
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
我的视图中有一个隐藏的表单字段,看起来像 = form_for @excel_version do | form | = form.hidden_field:key
因此,在我的更新操作中,我只使用@excel_version.assign_attributes(params[:excel_version])
亚马逊返回的密钥使其成为模型就好了。但是,安装在@excel_version对象上的上传器没有获取url,我无法设置链接然后下载该文件。
关于我如何使用S3参数的任何建议都会返回给我,以便将文件与模型关联起来作为载波通常会做什么?
谢谢!
P.S。另一个答案在这里建议阅读github上的carrier_wave直接文档,我已经发现并且在这方面没有帮助。
答案 0 :(得分:0)
要将图像与模型相关联,您可以在控制器中创建一个方法,该方法将使用亚马逊的参数并创建图像链接
例如,您可以 -
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”来创建与图像的精确链接。 (发送的参数同时具有密钥和桶名称)
现在,您可以将此图片网址放在视图中的隐藏对象中,这样当表单发布到服务器时,网址也会随之发布。您可以将其与模型相关联。
希望这会有所帮助。它对我有用。
答案 1 :(得分:0)
所以我的问题是我在错误的表单上有hidden_field :key
字段。我错误地将字段放在将文件上传到S3的direct_upload_form_for @uploader
表单上。
当然,在将文件发布到S3后,用户返回到的表单上需要:key
字段(即传递给success_action_redirect
的网址方法)。在那里,S3将返回参数中的密钥,您可以将其与模型相关联。
感谢所有有用的建议!