为什么Devise会将sign_up错误重定向到其他页面?

我创建了新的rails项目,只有一个生成的主页控制器来测试它。

我的设计模型是User ,所以注册页面是http://localhost:3000/users/sign_up

如果我触发错误,例如,在没有提供密码的情况下提交表单,我会被重定向到http://localhost:3000/users

如何在http://localhost:3000/users/sign_up后继续使用http://localhost:3000/users/sign_up

我读了这个问题 , 唯一的答案建议在控制器中使用redirect_to :back

问题是我没有超越控制器。 如果覆盖是解决的唯一方法,请解释它应该是什么。

这是我的routes.rb

 Rails.application.routes.draw do root to: "home#index" get 'home/index' devise_for :users end 

这是Devise::RegistrationsController的源代码。 我应该如何覆盖newcreate来实现我的需求?

我强烈建议你不要这样做。 Rails应用程序的默认行为(遵循路由命名约定)就是您所描述的方式。 但是,如果你真的需要这个,那就是这样的。

首先,转到您的routes.rb和:

 devise_scope :user do post 'users/sign_up', to: 'devise/registrations#create' end 

编辑

然后,生成设计视图,以便您可以覆盖表单的默认行为。

 rails g devise:views 

然后,打开您的app/views/devise/registrations/new.html文件并编辑form_for行,使其如下所示:

 <%= form_for(resource, as: resource_name, url: users_sign_up_path) do |f| %>