2009-10-21 10 views
8

Когда пользователь терпит неудачу войдите на мое приложение Rails, я хотел бы указать их на страницу сброса пароля:link_to() в Rails флэш

flash[:notice] = "Login failed. If you have forgotten your password, you can #{link_to('reset it', reset_path)}" 

Однако, я не могу использовать link_to в контроллере , Каков наилучший способ сделать это без смешивания контроллера и логики просмотра?

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

ответ

9

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

Если вы хотите сделать это во флэш-сообщении, вы должны использовать url_for, чтобы построить ссылку вместо link_to.

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

flash[:error] = render_to_string(:partial => "shared/login_failed_message") 

# in shared/_login_failed_message.html.erb 
<%= "Login failed. If you have forgotten your password, you can #{link_to('reset it', reset_path)}" %> 
+0

Спасибо - парциальное именно то, что мне было нужно. – Grandpa

+1

Я нахожу, что это не сработает (в Rails 3.1), потому что весь вывод экранирован перед визуализацией. Таким образом, вы получаете что-то вроде «Листинг, сохраненный в < a href = "/teams/1 " > Команда David Tuite </a >« –

+2

Просто добавьте метод .html_safe, и он должен работать. – MarioRicalde

5
flash[:notice] = "Login failed. If you have forgotten your password, you can <a href='#{url_for(reset_path)}'>reset it</a>" 

Правильно, link_to вид помощника. Пожалуйста, нам более общий способ построения по ссылке, а-ля url_for