2009-10-21 128 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

我认为最常见的解决方案是在登录表单中粘贴密码重置页面的链接,因此您的Flash消息根本无需处理。这也允许用户在没有首先登录失败的情况下请求复位。

如果你想在闪光消息中使用它,你应该使用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 2009-10-21 17:34:28

+1

我发现这不起作用(在Rails 3.1中),因为所有输出在渲染之前都会被转义。所以你得到像“列表保存到< /队/ 1 " >大卫Tuite的团队< /一>” – 2011-07-21 12:18:48

+2

只需添加.html_safe方法,它应该工作。 – MarioRicalde 2012-02-29 23:59:45

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