Rails flash中的link_to()

当用户在我的Rails应用程序上登录失败时,我想将它们指向密码重置页面:

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

但是,我不能在控制器中使用link_to。 如果不混合使用控制器和视图逻辑,最好的方法是什么?

我最好的猜测是闪光灯是错误的地方,但我很感激任何输入。

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

如果要在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)}" %> 
 flash[:notice] = "Login failed. If you have forgotten your password, you can reset it" 

正确,link_to是一个视图助手。 请给我们一个更通用的方法来构建链接,àlaurl_for

今天这个问题的最佳答案可能是(取自http://www.railsexperiments.com/using-helpers-inside-controllers )

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