我有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
我正试图在状态更新失败时进行救援。我想向用户显示一条flash消息,但是 - 这似乎是我可以得到的:
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
如何收到错误消息,以便通过控制器将其显示给用户?
答案 0 :(得分: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子句中执行rescue return false并将update_status调用包装在if语句中,但是Exceptions是一个更强大的解决方案。