2012-01-02 4 views
1

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

flash[:error] = "Sign in with Twitter failed" 

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

Например, когда я пытался сделать это

redirect_to show_path, flash[:error] => "Twitter's saying you're trying to post the same message twice" 

Это просто не отправляя сообщение на Twitter и не дает никаких сообщений об ошибке. Когда я изменяю => к = он ломает все приложения (когда я пытаюсь опубликовать дважды) дает мне это сообщение:

can't convert Symbol into String 

Даже незнакомец (для меня), у меня нет никаких проблем с: уведомления. Это было прекрасно.

redirect_to show_path, :notice => "Your Tweet was posted!" 

Может кто-нибудь объяснить, почему это происходит? This is the project on GitHub.

ответ

4

Обратите внимание, что в вашем примере с уведомлением вы используете необработанный символ :notice в хэш-аргументе redirect_to вместо flash[:notice]. В коде с ошибкой вы пытаетесь использовать flash[:alert]. Вам необходимо пройти только символ, поэтому попробуйте

redirect_to show_path, :error => "Twitter's saying you're trying to post the same message twice" 

Вы можете также установить предупреждения вспышки перед вызовом redirect_to:

flash[:error] = "Twitter's saying you're trying to post the same message twice" 
redirect_to show_path 
+0

На самом деле, если вы внимательно читали мою О.П., я уже попробовал свое первое решение, и отметил, что не отображалось сообщение об ошибке на всех. Однако второе решение сработало. Можете ли вы объяснить, почему первый не работает? – Leahcim

+0

В вашем примере вы используете 'flash [: error] =>" stuff "' в вызове redirect_to. Вам нужно использовать ': error =>" stuff "', без вспышки. [] Call. – jsinger

+0

Разница между ними заключается в том, что когда вы используете 'flash [: error] =>" stuff "', ключ, который входит в хэш-аргумент, - это любое значение 'flash [: error]' is - вероятно, пустая строка, если вы явно не задали его заранее. Если вы вместо этого переходите в ': error =>« stuff »', вы используете символ ': error' для своего ключа, а не какое-то таинственное значение, плавающее в' flash'. – jsinger

0

ли вы попробовать?

flash.now [: извещение] = "некоторый текст"

3

Да, я был там тоже :)

@jsinger частично прав. Вам нужно передать символ вместо хеша flash[]. Но есть улов: redirec_to поддерживает только два сокращенных символа: :notice и :alert. Существует третий, общий: :flash.

redirect_to show_path, :flash => { :success/:error/:whatever => "your flash message" } 

Интересно, что за этим стоит.

APIdock

+0

Возможно, просто проще иметь более простой интерфейс, который он может использовать для общего случая, используя синтаксис bucket, что-то вроде 'args [: flash] .each {| k, v | flash [k] = v} '. Но если у вас есть небольшое подмножество допустимых типов, которые очень распространены в использовании (: notice и: alert, очевидно), наличие ярлыка прямо на них может сэкономить приличное количество времени/кода. – jsinger

+0

Это именно то, что я говорю. Ведро может быть приятным, если вам нужно установить несколько параметров флэш-памяти, но я никогда не использовал его. С другой стороны, я иногда использую успех, ошибку и уведомление в каждом проекте + предупреждение. Это было бы немного проще, если бы я мог просто написать «redirect_to ...,: success =>» хорошо сделано! »' :) – bassneck

+0

Yea. Возможно, разработчики Rails: обратите внимание и: много предупреждают? Кто знает. На самом деле, глядя на api [здесь] (http://api.rubyonrails.org/classes/ActionDispatch/Flash/FlashHash.html), уведомления и предупреждения являются единственными параметрами FlashHash, которые имеют встроенные средства доступа, а затем принимают любые произвольные символы позже. Если это так, то, я думаю, это имеет смысл -: успех и т. Д. - это просто конвенции, используемые сообществом. Возможно, более старые версии разрешены только: уведомление и: предупреждение конкретно, поэтому оно выросло из этого? Я только пару раз ругался с Rails, так что idk. – jsinger