2011-04-14 90 views
0

我有一個頭痛的問題,我似乎無法找到一個簡單的解決方案。使用回形針創建對象的AJAX文件上傳

我有幾個模型,每個都有一個圖像附件,屬於一個用戶。我做了一個非常好的ajax文件上傳和圖像裁剪的形式,但有一個問題。當我編輯已經在數據庫中的對象時,一切正常,但當我創建一個新對象時,上傳文件時它沒有。事情是,爲了能夠上傳和保存圖像,對象必須在數據庫中。我發現了兩個可能的解決方案來解決這個問題,但沒有一個能正常工作。

第一個是在新動作中創建數據庫中的對象並重定向到編輯動作。優點是它是一個非常簡單的修復。缺點是,即使用戶取消或從未提交過表單,對象也會顯示在列表中,這是非常令人困惑的。

第二種可能的解決方案是將模型的附件字段提取到單獨的模型中。在創建時,我只需要創建一個附件對象。如果用戶取消它,會使附件成爲孤兒,但這可能是可以的,因爲孤兒可以定期清除。這個問題是我無法找到一種方法來阻止用戶劫持孤兒圖片或其他圖片。除非我無法解決這個問題,我卡住了。

我完全沒有想法,真的需要這個幫助。

感謝,godisemo

編輯:

我可能不清楚。在我的表單中可以上傳圖片。在表單提交之前,圖像會立即上傳到帶有JavaScript的服務器。原因是我想讓用戶裁剪圖像。這與使用現有對象時沒有任何問題,但是在創建新對象時,正如我之前試圖解釋的那樣。

回答

0

我現在用完全不同的方法解決了這個問題。我沒有考慮使用文件系統和臨時文件來解決數據庫,對象和模型。當圖片上傳時,通過回形針進行處理,然後將生成的圖片移動到我可以控制它們的文件夾中。

我根據我的上一個真正偉大的文章的解決方案,你可以在這裏找到,http://ryantownsend.co.uk/articles/storing-paperclip-file-uploads-when-validation-fails.html

+0

這是更新的鏈接http://web.archive.org/web/20100919151143/http://ryantownsend.co.uk/articles/storing-paperclip-file-uploads-when-validation-fails.html – 2013-07-29 16:05:54

0

我從來沒有必須讓模型已經在數據庫中回形針工作。

你可以嘗試的一件事是以下內容。我不知道你的模型叫什麼,但讓我們說用戶有一個圖像。製作新的表單,以便所有用戶字段都在params [:user] var中傳遞,但將圖像上傳文件與params [:user]分開,例如params [:my_image]。

然後在您的控制器驗證並保存用戶,然後在user.save之後,附加圖像。

+0

我可能不清楚我是什麼意思機智AJAX上傳。該圖像即時提交,而沒有真正提交表單。因此,我的問題的原因。我更新了這個問題以更好地解釋這個問題不管怎麼說,還是要謝謝你。 – Godisemo 2011-04-14 10:09:38