2017-04-05 37 views
0

使用Rails 4.我打電話給一個API,它將返回Shop和照片。當它返回照片時,最多可以顯示10張照片。保留10條記錄在Rails中創建/更新

每次我打電話給API,它都會find_or_initialize_by一個店鋪,這樣我總是更新店鋪的詳細信息。同時,我也想更新照片。無法知道這些照片是相同還是不同,甚至不是來自網址。不同的照片網址可能與以前創建的照片相同。沒有參考ID,我也沒有在我的服務器上保存/下載照片。

我有以下代碼:

@shop = Shop.find_or_initialize_by(source_id: shop_params[:id]) 
@shop.photos.build(shop_params[:photos]) 

問題

比方說,當我第一次創造店A,用4張照片的API返回。我保存所有4張照片。我再次爲商店A調用API,API返回10張照片。我想保存這10張照片。我不介意前面的4個是否被破壞或更新。我如何完成這項工作?保存後總的照片應該是10張。

然後,我可以再次調用API,它返回6張照片。現在我不想保留前面的10張照片,但只是6張照片。

在我看來,我會打電話@shop.photos,這實質上是最新的照片(最多10張)。

注意 API返回的照片可能與我已經在我的數據庫中已經有的照片重複。這就是爲什麼我無法保留以前的照片。

+0

你能澄清這一點? 「沒有參考ID,我也沒有將照片保存在我的數據庫中」。你的數據庫中的照片?你想把它們保存到你的數據庫? – Swards

+0

@Swards抱歉,我的意思是「我不在我的服務器上保存/下載照片」 – Victor

回答

1

您可以隨時刪除以前的記錄並創建新照片。

@shop = Shop.find_or_initialize_by(source_id: shop_params[:id]) 
@shop.save_photos(shop_params[:photos]) 
在shop.rb

def save_photos(photos) 
    self.photos.destroy_all 
    self.photos.build(photos) 
end 

這是非常不可靠的解決方案,但將努力

+0

謝謝。什麼更強大? – Victor

1

嘗試:

@shop.photos = Photo.new(shop_params[:photos]) 

這將只設置photos到一個新的數組。

+0

這填充了一組新照片。如果我現在有7張照片,第二次調用API返回10,我將最終得到17張照片,其中一些可能會重複。 (我更新了這個問題只是爲了更清楚) – Victor

+0

只有一個查詢'Photo.new(shop_params [:photos])'會啓動一個新的照片對象,不是嗎?雖然@ shop.photos顯示了一對多的關係......我很困惑? – Mayank

相關問題