2012-05-26 91 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

对不起,它没有帮助......当怀疑脚手架!?我真的不知道,对不起。 –

相关问题