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