我有一些代码可以从 twitter API 获取一些推文:
initial_tweets = get_tweets_in_time_range self.name, (Time.now-1.weeks), Time.now
initial_tweets.each do |tweet|
new_tweet = Tweet.new
new_tweet.favorite_count = tweet.favorite_count
new_tweet.filter_level = tweet.filter_level
new_tweet.retweet_count = tweet.retweet_count
new_tweet.text = tweet.text
new_tweet.tweeted_at = tweet.created_at
new_tweet.created_at = DateTime.strptime tweet.created_at.to_s, '%Y-%m-%d %H:%M:%S %z'
new_tweet.save
# What happens on a failed save
end
如果保存失败,正确的回退是什么?正如评论所在的位置所指出的那样。谢谢你的帮助。
最佳答案
save
只返回true或false,可以使用save!
,如果记录无效会抛出异常。如果引发异常,您可以捕获它。
begin
....
new_tweet.save!
rescue exception => e
puts e.inspect
#you can continue the loop or exit
end
正如@Stefan 所说,您可以将代码包装在一个事务中,如果一条记录保存失败,所有保存的记录都会回滚。我不建议您这样做,除非您真的希望每条记录都成功保存。
Tweet.transaction do
initial_tweets = get_tweets_in_time_range self.name, (Time.now-1.weeks), Time.now
initial_tweets.each do |tweet|
new_tweet = Tweet.new
.....
new_tweet.created_at = DateTime.strptime tweet.created_at.to_s, '%Y-%m-%d %H:%M:%S %z'
new_tweet.save! # you have to add '!', once save failed, it will trigger rolls back.
end
end
关于ruby-on-rails - 从 Rails 中保存的失败模型中恢复的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32730969/