2011-07-17 58 views
0

拯救我有一个tweets_controller从Twitter宝石

#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

您可以根据应用程序创建并抛出自定义异常。

在app/lib中/ could_not_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 

另一种选择是做抢救回在您的Twitter :: Error子句中为false,并将update_status调用包装在if语句中,但是是Exceptions是一个更强大的解决方案。

+0

谢谢。我会试试这个。除了类声明之外,我不需要app/lib文件中的任何东西? – Slick23

+0

我得到'错误的参数数量(1为2)'相关的行'raise CouldNotUpdateStatusError.new(“无法更新状态”) – Slick23

+0

这是Twitter :: Error属性期望额外的数据,只是使错误扩展标准错误。我已经更新了我的答案。 – Gazler