Rails了解GET请求但不了解POST请求

时间:2011-02-18 15:53:32

标签: ruby-on-rails routes devise

当我通过浏览器(GET)访问我的应用程序中的/ users / registration / sign_up时,页面呈现。当我通过POST(通过提交目标/ users / registration / sign_up或ajax的表单)执行相同的操作时,我的应用程序返回以下错误:

未知行动 无法找到UsersController

的操作“注册”

我正在使用设计进行身份验证并使用以下方法为我的用户模型创建设计路径:

devise_for:users

此路径应该路由到devise / registrations_controller,我希望它能够执行新方法(它目前用于GET请求)。也许rails,理解请求是一个POST请求自动将它引导到create方法但我不认为这是问题因为我在create方法中首先启动调试器并且调试器在我收到之前没有在我的终端中启动这个错误。

任何有设计经验的人都可以解读发生了什么吗?如有必要,我很乐意提供更多信息。感谢。

1 个答案:

答案 0 :(得分:4)

Devise将路由添加到您的Rails应用程序,您可以通过从终端运行rake routes来查看:

      new_user_session GET    /users/sign_in(.:format)
          user_session POST   /users/sign_in(.:format)
  destroy_user_session GET    /users/sign_out(.:format)
         user_password POST   /users/password(.:format)
     new_user_password GET    /users/password/new(.:format)
    edit_user_password GET    /users/password/edit(.:format)
                       PUT    /users/password(.:format)
     user_registration POST   /users(.:format)
 new_user_registration GET    /users/sign_up(.:format)
edit_user_registration GET    /users/edit(.:format)
                       PUT    /users(.:format)
                       DELETE /users(.:format)
                  root        /(.:format)

正如您所发现的,有GET /users/sign_up但没有POST /users/sign_up。创建Devise时需要POST /users,您可以使用辅助方法user_registration_path。这由Devise::RegistrationsController#create处理。