我已经阅读并尝试了许多 SO 帖子(即此处、此处和此处)中发布的解决方案,以及 Devise 关于如何在注册失败后更改路径的答案以及 Devise 的RegistrationsController 代码,但均无济于事。
而不是像大多数建议的那样在文件夹中执行自定义失败方法/lib/
,看起来修复/覆盖它的最简单的地方是在RegistrationsController#create
底部的方法中:
else
clean_up_passwords resource
respond_with resource
end
它(我假设)正确响应user
(即将它们重定向到root_path/users
),但这是棘手的部分:当我的用户注册时,我创建了一个嵌套模型,为此侵入 Devise 非常困难。我担心如果我弄乱了这个RegistrationsController#create
方法,我会破坏我完美工作的嵌套模型。
有人还提到,Devise 解决方案对他们不起作用,但在更改路由问题后让它起作用。我怀疑我的情况是这样,但这是我的routes.rb
文件以防万一:
devise_for :users, :controllers => { :registrations => "registrations" }
resources :users
resources :users do
resources :lockers
end
resources :lockers do
resources :products
end
resources :products
resources :lockups
match '/user/:id', :to => 'users#show', :as => :user
root :to => 'home#index'
我非常感谢任何人可以为我提供的任何帮助。我对 Rails 还是很陌生,但我总是乐于学习。
编辑:感谢 Passionate,我一直在试图弄清楚如何更改else
注册控制器中最后一个块中的逻辑。这是我尝试过的(以及我的菜鸟逻辑):
# Obviously cleared all the fields since it made no mention of resource
# redirect_to root_path
# Too many arguments since root_path takes 0
# redirect_to root_path resource
# Just bombed, something about a String somethingorother
# render root_path
# Heh, apparently call 'respond_with' and 'redirect_to' multiple times in one action
# respond_with resource
# redirect_to root_path