2012-05-26 88 views
0

我正在使用bcrypt-ruby進行密碼加密。在寶石http://bcrypt-ruby.rubyforge.org/的文檔中,他們提供了一個操作來允許某人重置密碼。我正在嘗試執行此操作。如何使用Ruby on Rails link_to與控制器中的方法

我下面的代碼添加我的登錄頁面上:

<p>Forgot your Password? <%= link_to "Click to reset your password", forgot_password_session_path, confirm: "Do you really want to reset your password?" %></p> 

這裏是我的sessions_controller.rb文件中的代碼:

def forgot_password 
    random_password = Array.new(10).map { (65 + rand(58)).chr }.join 
    case 
    when User.find_by_email(params[:session][:email_user]) 
     user = User.find_by_email(params[:session][:email_user]) 
    when User.find_by_username(params[:session][:email_user]) 
     user = User.find_by_username(params[:session][:email_user]) 
    end 
    user.password = user.password_confirmation = random_password 
    user.save! 
    Mailer.create_and_deliver_password_change(user, random_password) 
end 

這裏是配置/ routes.db的定義:

resources :sessions do 
    member do 
    get "forgot_password" 
    end 
end 

下面是從耙路線的輸出:

forgot_password_session GET /sessions/:id/forgot_password(.:format) sessions#forgot_password 

當我嘗試點擊鏈接,在我的登錄鏈接,我得到以下錯誤:

沒有路由匹配{:動作=>「forgot_password」:控制器=>「會話」}

我不知道它是如何表示沒有路線匹配時,它似乎。我重新啓動了我的導航服務器& spork,但仍然出現錯誤。我不知道下一步。

任何幫助將不勝感激。

更新2012年5月26日上午09時14 GMT-6:

我改爲POST,重新啓動我的Rails服務器&叉勺。我得到了同樣的錯誤。這是我的日誌從服務器:

開始獲取「/登錄」爲127.0.0.1在2012-05-26 09:13:36 -0500 處理由SessionsController#新爲HTML 渲染會話/ new.html內的佈局/應用(112.4ms) .erb完成500內部服務器錯誤在116ms

這裏是耙路由信息:

forgot_password_session POST /sessions/:id/forgot_password(.:format) sessions#forgot_password 

回答

0

它可能需要一個POST請求。當我參加一個Rails課程時,內聯鏈接調用不一致。你有這個錯誤的原因是你的路由文件配置爲GET,而不是POST。只是在黑暗中拍攝,但嘗試添加同一行,但與POST。

+0

我再次嘗試,但它沒有奏效。我用更多的信息更新了我的描述。看起來像更多的代碼或者可能需要更改某處的設置。 –

+0

我再看看耙路線聲明。它看起來像在尋找一個sessions/id/forgot_password路徑。 我有登錄頁面上的鏈接。由於沒有點擊登錄按鈕,此時沒有會話ID。我將把程序移至application_controller.rb並將電子郵件或用戶名傳遞給它,然後重試。我會用我的結果發佈更新。 –

+0

對不起,它沒有幫助......當懷疑腳手架!?我真的不知道,對不起。 –

相關問題