2016-09-27 35 views
0

我正在使用Twitter gem检索特定的推文并将它们保存到我的数据库中。我想处理nil价值和使用unless item.blank?为此目的。这里是我的代码:Rails - 处理模型中的零值

def self.get_tweets user 
all_tweets = CLIENT.user_timeline(user, count: "20", exclude_replies: true, include_rts: false) 
good_tweets = all_tweets.select{ |t| t.retweet_count + t.favorite_count > 0} 
good_tweets.each do |tweet| 
    Twit.find_or_create_by(link: "#{tweet.uri}") do |twit| 
    twit.content = tweet.text unless tweet.text.blank? 
    twit.like = tweet.favorite_count 
    twit.retweet = tweet.retweet_count 
    twit.first_date = tweet.created_at 
    twit.engagement = twit.like + twit.retweet 
    twit.image_url = tweet.media[0].media_url unless tweet.media[0].media_url.blank? 
    twit.content_url = tweet.urls[0].expanded_url.to_s.split("?")[0] unless tweet.urls[0].blank? 
    end 
end 
end 

不过,我知道这是不是继续作为我的代码首先崩溃的广告时,我刷新我的网页我有我的本地URL http://localhost:3000/twits的值,它是我要的不是什么好办法。

我该如何优雅地处理这个错误?我一个月以来一直在学习Ruby/Rails,所以不太清楚。谢谢。

+0

你问“我该如何优雅地处理这个错误? “但是你忽略了iinclude错误的文本 – MarsAtomic

+0

@MarsAtomic,错误是下面的”未定义方法'media_url'为nil:NilClass“。它发生是因为我需要保存的一些推文没有所有的属性,一些我的脚本失败了......我需要正确保存推文,即使他们没有image_url,文本或链接内的例如。谢谢! – Eric

回答

1

的误差造成的,因为你想获得不带媒体鸣叫MEDIA_URL:

twit.image_url = tweet.media[0].media_url unless tweet.media[0].media_url.blank? 

,所以你可以使用

twit.image_url = tweet.media[0].media_url unless tweet.media[0].blank? || tweet.media[0].media_url.blank? 

我宁愿相反的逻辑

twit.image_url = tweet.media[0].media_url if tweet.media[0].present? 

甚至更​​短

twit.image_url = tweet.media[0].try(:media_url)