当用户登录我的Rails应用程序失败时,我想将它们指向密码重置页面:
flash[:notice] = "Login failed. If you have forgotten your password, you can #{link_to('reset it', reset_path)}"
但是,我不能在控制器中使用link_to。如果不混合使用控制器和视图逻辑,最好的方法是什么?
我最好的猜测是闪光灯是错误的地方,但我很感激任何输入。
答案 0 :(得分:10)
我认为最常见的解决方案是在登录表单中粘贴密码重置页面的链接,因此您的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)}" %>
答案 1 :(得分:6)
今天这个问题的最佳答案可能是(取自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
答案 2 :(得分:5)
flash[:notice] = "Login failed. If you have forgotten your password, you can <a href='#{url_for(reset_path)}'>reset it</a>"
正确,link_to是一个视图助手。请告诉我们建立链接的更通用的方法,àlaurl_for