我是编写异常处理的新手,我不确定如何解决这种特殊处理。
我在表格中保存了多条推文,以缩短对Twitter的调用。我还允许用户通过我的应用程序喜欢这些推文。
但是,如果该推文已被删除,则显示的错误为
(Twitter::Error::NotFound) — Error raised when tweet does not exist or has been deleted.
我想做的是,如果我收到该错误,我想从我的表中删除推文。
这是我的代码:
def favorite
not_favorited = self.favorites.where(favorited: false)
not_favorited_ids = not_favorited.map(&:id)
tweet_ids = not_favorited.map(&:tweet_id)
begin
Favorite.where(id: not_favorited_ids).update_all(favorited: true) && self.twitter.favorite!(tweet_ids)
rescue Twitter::Error::NotFound => e
# if tweet is not found, then delete the tweet from the favorites
rescue Twitter::Error::AlreadyFavorited => e
rescue Twitter::Error::Unauthorized => e
logger.error "Unauthorized access"
rescue => e
end
end
因此,当你看到我为Error :: NotFound进行抢救时,但我不确定如何编写一段代码来获取该特定ID并继续删除它,然后再继续该过程。
答案 0 :(得分:0)
update_all
不会返回有关哪些记录已成功更新的有意义信息,以及哪些记录引发了错误。
由于您希望处理每个失败更新的失败,因此最好一次更新一条推文。
代码类似于以下内容:
Favorite.where(id: not_favorited_ids).each do |tweet|
begin
Favorite.update(tweet.id, favorited: true)
self.twitter.favorite!(tweet.id)
rescue Twitter::Error::NotFound => e
# if tweet is not found, then delete the tweet from the favorites using tweet.id
end
end
重写favorite
方法逻辑以便一次使用一条推文可能是一个好主意。
答案 1 :(得分:0)
你不能不喜欢不存在的推文。对象消失了。当你destroy_status时,推文就消失了。没有什么可以不受欢迎的。