2016-09-27 4 views
0

Я использую Twitter gem для получения определенных твитов и сохранения их в моей базе данных. Я бы хотел обработать значение nil и использовать для этой цели unless item.blank?. Вот мой код:Rails - Обработка значения Nil в модели

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

Вы спрашиваете: «Как я могу элегантно справиться с этой ошибкой? «но вы не учитываете текст ошибки. – 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) 
Смежные вопросы