使用设计范围重新定义默认路由

时间:2013-07-27 16:59:33

标签: ruby-on-rails devise

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

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 个答案:

答案 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"