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

时间:2017-04-05 09:49:55

标签: ruby-on-rails devise

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

我的设计模型为User,因此注册页面为http://localhost:3000/users/sign_up

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

如何在出错后留在http://localhost:3000/users/sign_up

我看了this questionthe only answer建议在控制器中使用redirect_to :back

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

这是我的routes.rb

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

HereDevise::RegistrationsController的源代码。我应该如何覆盖newcreate来实现我的目标?

1 个答案:

答案 0 :(得分:1)

我强烈建议您不要这样做。 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| %>