尝试使用设计范围重新定义会话路由时收到错误。
devise_for :users
devise_scope :users do
get '/login' => 'devise/sessions#new', as: :new_user_session
post '/login' => 'devise/sessions#create', as: :user_session
delete '/logout' => 'devise/sessions#destroy', as: :destroy_user_session
end
错误。
Invalid route name, already in use: 'new_user_session' You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes
我理解错误并不是为什么会发生这种错误。范围不会重新定义为new_user_session吗?
此外,如果你按照wiki进行传递,你会得到一个设备弃用警告。 https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes
答案 0 :(得分:8)
猜猜我需要跳过会话
devise_for :users, :skip => [:sessions]
答案 1 :(得分:4)
我遇到了同样的问题。如果你注意devise_scope模型必须是单数和devise_for复数。所以解决方案是:
devise_for :users
devise_scope :user do
...
end
答案 2 :(得分:1)
编辑:误解了一下这个问题。 如果你覆盖了一个设备控制器,你应该能够将:controllers选项哈希传递给devise_for。让你的新控制器继承原始控制器是好的。
如果您只是想尝试更改路径,则不希望使用devise_scope。在这种情况下,以下内容应该起作用:
devise_for :users, :path => :account, :path_names => {sign_in: 'login', sign_out: 'logout', sign_up: 'register'} # 'account/login' replaces 'users/sign_in', etc.
答案 3 :(得分:1)
可能的解决方案可以在devise_for中添加“为” 选项
devise_for :users, as: "some_prefix"