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