为什么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
的源代码。 我应该如何覆盖new
或create
来实现我的需求?
我强烈建议你不要这样做。 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| %>