我创建了一个新的rails项目,只有一个生成的主页控制器来测试它。
我的设计模型为User
,因此注册页面为http://localhost:3000/users/sign_up
。
如果我触发错误,例如,在没有提供密码的情况下提交表单,我会被重定向到http://localhost:3000/users
。
如何在出错后留在http://localhost:3000/users/sign_up
?
我看了this question,the only answer建议在控制器中使用redirect_to :back
。
问题是我没有覆盖控制器。如果覆盖是唯一的解决方法,请解释它应该如何。
这是我的routes.rb
Rails.application.routes.draw do
root to: "home#index"
get 'home/index'
devise_for :users
end
Here是Devise::RegistrationsController
的源代码。我应该如何覆盖new
或create
来实现我的目标?
答案 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| %>