保留10条记录以在Rails

时间:2017-04-05 16:58:54

标签: ruby-on-rails

使用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返回的照片可能与我在数据库中已有的照片重复。这就是我无法保留以前照片的原因。

2 个答案:

答案 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

这是非常不健全的解决方案,但可以正常工作