Спасение от Twitter Gem - PullRequest
       15

Спасение от Twitter Gem

0 голосов
/ 18 июля 2011

у меня есть tweets_controller

#called when user submits twitter form

def message
          unless current_user
            session[:twitter_message] = params[:twitter_message] #sets the message from the form so it's available for send_tweet in tweet.rb after we pass through omniauth
            redirect_to '/auth/twitter' #redirects to authorize via omniauth/twitter and create the user
          else
            @auth = Authorization.find_by_user_id(current_user)
            Tweet.update_status(@auth, params[:twitter_message])
            redirect_to edit_user_path(current_user), :notice => "Tweet sent."
          end
end

Я пытаюсь спасти, когда обновление состояния не удается. Я хочу отобразить флэш-сообщение для пользователя, но - насколько я могу судить, это:

def self.update_status(auth, msg)

     @token = auth.token
     @secret = auth.secret
     @message = msg
     @t = Twitter::Client.new

     Twitter.configure do |config|
       config.consumer_key = '[key]'
       config.consumer_secret = '[secret]'
       config.oauth_token = @token
       config.oauth_token_secret = @secret
       config.gateway = '[gateway_url]'
     end

     ret = @t.update(@message)
     tweet ||= Tweet.create_from_response(ret, auth.id)

    rescue Twitter::Error => e
      logger.error "#{e.message}."
end

Как получить сообщение об ошибке, чтобы я мог отобразить его своему пользователю через контроллер?

1 Ответ

1 голос
/ 18 июля 2011

Вы можете создавать и генерировать пользовательские исключения на основе приложения.

В приложении / lib / могли_не_update_status_error.rb

class CouldNotUpdateStatusError < StandardError
end

Тогда в вашей модели:

rescue Twitter::Error => e
  logger.error "#{e.message}."
  raise CouldNotUpdateStatusError.new("Could not update status")

А в вашем контроллере

else
  begin
    @auth = Authorization.find_by_user_id(current_user)
    Tweet.update_status(@auth, params[:twitter_message])
    redirect_to edit_user_path(current_user), notice: "Tweet sent."
  rescue CoundNotUpdateStatusError => e
    # Do error stuff
end

Другим вариантом было бы сделать аварийное возвращение false в вашем предложении Twitter :: Error и обернуть вызов update_status в оператор if, однако исключения являются более надежным решением.

...