3

尝试使用设计范围重新定义会话路由时出错。

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

4

4 回答 4

8

猜猜我需要跳过会议 devise_for :users, :skip => [:sessions]

于 2013-07-27T17:44:58.907 回答
4

我有同样的问题。如果你注意 devise_scope 模型必须是单数和 devise_for 复数。所以解决方案是:

devise_for :users
devise_scope :user do
  ...
end
于 2014-04-01T17:47:45.197 回答
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.
于 2013-10-30T14:26:11.477 回答
1

可能的解决方案可能是将“as”选项添加到 devise_for

devise_for :users, as: "some_prefix"
于 2020-04-17T06:29:20.577 回答