關於Ajax拖拉圖片上傳..商品還沒建立沒有ID


#1

請問大大,目前公司要開發一個拖拉上傳圖片功能
目前在edit裡面是可以查到ID都能正常
不過在新增產品NEW的裡面,因為產品ID還沒建立起來
請問我要如何在建立產品以後,能把Ajax上傳的圖片ID全部在更新一次呢?


#2

這個需求很常見,我會建議你用類似 flag 來完成會好點,類似一開始配發一個 flag 給使用者(這邊只寫未測的虛擬碼,此處用 params or session 都可以,選哪個各有利弊,考量不太一樣就是了)

先假設 model 為

User <= Item <= Upload

然後流程中產生 flag

require 'securerandom' # Rails 下已經有引入,這行可以不用
flag = SecureRandom.hex(16) #會產生 hex x 32

這個 flag 可以對外,新增時把 item_id 先打成 0 (你的對象),然後上傳 table 多新增個 flag 欄位(string , limit: 32),上傳時要把 flag 存入,類似

if params[:flag].to_s.match(/^[\da-f]{32}$/) #當然 flag 要被 regex 驗證過才行
  Upload.create(item_id:0 , user_id: current_user.id , flag: params[:flag] ...)
end

之後等你對象儲存,再反向修正即可

item = Item.create(...)
if params[:flag] && params[:flag].to_s.match(/^[\da-f]{32}$/)
  Upload.where(item_id:0 , user_id: current_user.id , flag:params[:flag]).update_all(item_id:item.id)
end

大概就這樣唄,且你還可以撈出所有 item_id 為 0 沒有對象的草稿(但隸屬於該使用者下),讓使用者重新選擇正確對象不是?還是你要定時清理垃圾都可以,剩下擴充自己玩哩