Как обрабатывать ошибки в действии обновления (используя твиттер Gem) - PullRequest
2 голосов
/ 28 декабря 2011

Я делаю простое приложение на Rails с жемчужиной Twitter.Приложение предлагает пользователям выбрать значения из формы выбора, и те попадают в твит.Поскольку пользователь выбирает значения из формы выбора, и поскольку существуют значения по умолчанию, существует высокая вероятность того, что пользователь (нетерпеливо нажимая кнопку «отправить в твиттер») попытается создать дубликаты твитов, что запрещено Twitter

Twitter :: Ошибка :: Запрещено в SessionsController # update

Статус дублируется.

Таким образом, этот нуб пытается создать свой первыйобработчик ошибок

   def update
     @twit = "@TwitterUser  #{params[:wants]} to go to  #{params[:place]} "

     begin
       client.update(@twit)
       redirect_to show_path, :notice => "' ' + #{params[:wants] + ' ' + params[:place]    has been tweeted}"

     rescue Exception
       redirect_to show_path, :notice => "Hey Loser, Twitter says you cannot post same twice"
     end 
   end

Проблема, иногда отображается сообщение об ошибке, когда я не публикую одно и то же сообщение дважды подряд.Мне интересно, если сообщение об ошибке застревает, или я написал действие таким образом, чтобы оно могло это сделать?

Extra это первый раз, когда я пыталсячтобы включить сообщение об ошибке, я понятия не имею, правильно ли я делаю это или неправильно, или это могло бы быть сделано лучше.если у вас есть какие-либо советы о том, где этот код может пойти ... очень ценится.например, у меня есть несколько форм / действий, которые могут вызвать одну и ту же ошибку, так что я могу использовать метод СУХОЙ?

1 Ответ

0 голосов
/ 28 декабря 2011

Может быть, что выдается какой-то другой тип ошибки, а не то, что он «залипает». Вам нужно будет отследить ваш журнал ошибок (или использовать отладчик), чтобы увидеть, что Exception генерируется (и спасается). Вы также можете использовать несколько аварийных случаев для проверки различных исключений, например:

begin
   client.update(@twit)
   redirect_to show_path, :notice => "' ' + #{params[:wants] + ' ' + params[:place]    has been tweeted}"
 rescue Twitter::Error
   redirect_to show_path, :notice => "Hey Loser, Twitter says you cannot post same twice"
 rescue Exception
   puts "some other error happened!"
 end 

Другой вариант обработки ошибок - назначать, оценивать и вызывать любые исключения, например:

begin
   response = client.update(@twit)
   if !response
      raise "something went wrong!"
   else
       redirect_to show_path, :notice => "' ' + #{params[:wants] + ' ' + params[:place]    has been tweeted}"
   end

 rescue Exception
   redirect_to show_path, :notice => "Hey Loser, Twitter says you cannot post same twice"
 end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...