我有一个简单的Devise注册表单和validatable
插件。它主要按预期工作,如果用户忘记输入名字,则会使用红色验证消息将其重定向回来。
问题是它重定向到用户去的成功登录的相同路径(即它将它们重定向到/user
而不是回到/user/sign_up
)。如果用户因任何原因刷新页面,则会出现No route matches [GET] "/user"
错误。
如何在注册失败时强制重定向返回原始/user/sign_up
路由?我知道我可以破解注册控制器中的create
操作,但是当我重定向到正确的路由时,我会丢失设计验证消息。
更新
似乎问题是Devise处理respond_with
Rails 4 How Overwrite Devise Respond Path Upon Error的方式。看起来Devise尝试在/ user处呈现create
模板,但我仍然无法覆盖它。
答案 0 :(得分:8)
首先,您可以使用以下命令创建设计控制器 -
rails generate devise:controllers users
然后你必须修改你的路线设计
# config/routes.rb
Rails.application.routes.draw do
devise_for :users,
:skip => [:registrations]
devise_scope :user do
get "user/sign_up", to: "users/registrations#new", as: :new_user_registration
post "user/sign_up", to: "users/registrations#create", as: :user_registration
end
end
希望它有效。