tweet id NotFound时对twitter gem的异常处理

时间:2015-03-21 13:31:18

标签: ruby-on-rails ruby twitter

我是编写异常处理的新手,我不确定如何解决这种特殊处理。

我在表格中保存了多条推文,以缩短对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并继续删除它,然后再继续该过程。

2 个答案:

答案 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时,推文就消失了。没有什么可以不受欢迎的。