使用Rails 4.我正在调用API,它返回商店和照片。当它返回照片时,最多可以拍摄10张照片。
每次我调用API时,它都会find_or_initialize_by
一个商店,所以我总是更新商店的详细信息。与此同时,我也想更新照片。没有办法知道照片是相同还是不同,甚至不是来自网址。不同的照片网址可能与先前创建的照片相同。没有参考ID,我也没有在我的服务器中保存/下载照片。
我有以下代码:
@shop = Shop.find_or_initialize_by(source_id: shop_params[:id])
@shop.photos.build(shop_params[:photos])
问题
让我们说当我第一次创建商店A时,API返回4张照片。我保存了所有4张照片。我再次为Shop A调用API,API返回10张照片。我想保存这10张照片。如果之前的4个被销毁或更新,我不介意。我该如何工作?保存后总照片应为10张。
然后,我可以再次调用API,返回6张照片。现在我不想保留前10张照片,只留下6张照片。
在我看来,我会致电@shop.photos
,这本质上是最新的照片(最多10张)。
注意 API返回的照片可能与我在数据库中已有的照片重复。这就是我无法保留以前照片的原因。
答案 0 :(得分:1)
尝试:
@shop.photos = Photo.new(shop_params[:photos])
这只会将photos
设置为新数组。
答案 1 :(得分: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
这是非常不健全的解决方案,但可以正常工作