2013-01-17 41 views
1

我使用carrierwave_direct gem將文件直接上傳到S3,一切都很順利。但是,當亞馬遜重定向到success_action_redirect中指定的URL時,我不會將上傳的文件與對象相關聯。將使用Carrierwave_Direct上傳的文件與對象關聯起來

我的控制器看起來像

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做|形式| = form.hidden_​​field:key

因此,在我的更新操作中,我只使用@excel_version.assign_attributes(params[:excel_version]) ,亞馬遜返回的密鑰使它成爲模型就好了。但是,裝載在@excel_version對象上的上傳器沒有獲得url,我無法設置鏈接來下載文件。

關於如何使用S3參數返回給我的任何建議將文件與模型關聯起來作爲carrierwave通常會執行的操作?

謝謝!

P.S.這裏的另一個答案建議閱讀github上的carrier_wave直接文檔,我已經發現並且在這方面沒有幫助。

+0

你可以提供一些關於:鍵值返回的信息嗎?您是否已成功將密鑰值保存到@excel_version?如果是這樣,那麼爲什麼你有一個下載問題?如果你有密鑰,那麼你應該有正確的URL鏈接到上傳的文件...有更多的信息,也許我可以幫助 – FireDragon

回答

0

所以我的問題是,我有hidden_field :key字段錯誤的形式。我錯誤地將該字段放在上傳文件到S3的direct_upload_form_for @uploader表單中。

當然,你需要的:key場窗體上,用戶後返回到發佈的文件,以S3(即在給success_action_redirect方法傳遞的URL)。在S3中將會返回參數中的關鍵字,並且可以將其與您的模型相關聯。

感謝您提供的所有有用建議!

0

要將圖像到模型相關聯什麼,你所能做的就是建立在你的控制器的方法,其將使用亞馬遜的PARAMS和創建圖像鏈接

例如,你可以做 -

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」創建一個到圖像的確切鏈接。 (所發送的參數同時包含密鑰和存儲桶名稱)

現在,您可以將此圖像url放入視圖的隱藏對象中,以便當表單發佈到服務器時,url也會隨之發佈。您可以將其與您的模型相關聯。

希望這會有所幫助。它爲我工作。

+0

感謝分享。你能否展示你如何完成最後一步:將「filelink」分配給表單中的隱藏字段? – pejmanjohn

相關問題