如何使用控制器中的方法执行Ruby on Rails link_to

时间:2012-05-26 00:43:42

标签: routes ruby-on-rails-3.2 ruby-1.9.3

我使用bcrypt-ruby进行密码加密。在gem http://bcrypt-ruby.rubyforge.org/的文档中,他们提供了允许某人重置密码的操作。我正在尝试实施此操作。

我在登录页面上添加了以下代码:

<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

以下是config / routes.db中的定义:

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

以下是佣金路线的输出:

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

当我尝试点击登录链接上的链接时,出现以下错误:

没有路线匹配{:action =&gt;“forgot_password”,:controller =&gt;“sessions”}

我不知道它看起来是怎么回事。我重新启动了我的rails服务器&amp; spork但仍然得到错误。我不知道下一步。

任何帮助将不胜感激。

Update 5/26/2012 GMT-6上午9:14:

我改为POST,重启了我的rails服务器&amp;叉勺。我得到了同样的错误。这是我在服务器上的日志:

在2012-05-26 09:13:36 -0500开始获取127.0.0.1的“/ login” 由SessionsController处理#new为HTML   在布局/应用程序中渲染会话/ new.html.erb(112.4ms) 在116ms完成500内部服务器错误

以下是佣金路线信息:

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

1 个答案:

答案 0 :(得分:0)

它可能需要是POST请求。当我参加rails类时,内联链接调用是不一致的。您遇到该错误的原因是您的路由文件是为GET配置的,而不是POST。只是在黑暗中拍摄,但尝试添加相同的行,但使用POST。