10

ユーザーが Rails アプリへのログインに失敗した場合、パスワード リセット ページに誘導したいと考えています。

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

ただし、コントローラーで link_to を使用することはできません。コントローラーとビューロジックを混在させずにこれを行う最良の方法は何ですか?

私の最善の推測では、これを行うにはフラッシュが間違った場所であるということですが、ご意見をいただければ幸いです。

4

3 に答える 3

11

最も一般的な解決策は、ログインフォームのパスワードリセットページへのリンクを貼り付けることだと思います。そうすれば、フラッシュメッセージでそれを処理する必要がまったくなくなります。これにより、ユーザーは最初にログインに失敗することなくリセットを要求することもできます。

フラッシュメッセージでそれを行いたい場合は、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)}" %>
于 2009-10-21T03:30:14.720 に答える
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
于 2012-09-17T14:55:24.757 に答える
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 のように、リンクを作成するより一般的な方法を教えてください。

于 2009-10-21T05:07:39.207 に答える