我在尝试转到http://app.mysite.dev/login时收到以下错误-
Could not find devise mapping for path "/login".
This may happen for two reasons:
1) You forgot to wrap your route inside the scope block. For example:
devise_scope :user do
get "/some/route" => "some_devise_controller"
end
2) You are testing a Devise controller bypassing the router.
If so, you can explicitly tell Devise which mapping to use:
@request.env["devise.mapping"] = Devise.mappings[:user]现在,这里是我的routes.rb文件的相关部分:
namespace 'app', path: '', constraints: { subdomain: 'app' } do
devise_for :users, :skip => [:registrations, :confirmations]
devise_for :agents, :skip => :sessions
devise_scope :users do
get "login" => "users/sessions#new"
end
...
end由get "login"线路生成的路由如下(来自rake routes)
app_login GET /login(.:format) app/users/sessions#new {:subdomain=>"app"}我不知道这是否重要,但我将STI用于用户>代理关系。
所以,我已经定义了devise的范围,我没有测试,所以你知道是怎么回事吗?
发布于 2015-09-06 14:15:34
尝试将您的devise_scope替换为以下内容。在您的命名空间'app‘块中。
devise_scope :app_user do
get "login" => "users/sessions#new"
end它似乎正在设计改变它在命名空间中寻找的范围。
供您参考:https://github.com/plataformatec/devise/issues/2496
是的,它应该是devise_scope :app_user而不是devise_scope :app_users
发布于 2015-09-06 14:22:16
这只是一个简单的拼写错误- devise_scope :users应该是devise_scope :user,如错误消息中所述。
发布于 2015-02-20 23:53:19
您似乎没有为您的:users定义自定义的SessionsController,并且Devise不能使用它的默认SessionsController,因为您已经为您的devise_scope :users设置了名称空间。
我会定义你自己的自定义class App::SessionsController,然后添加它,重写你的路由,如下所示:
namespace 'app', path: '', constraints: { subdomain: 'app' } do
devise_for :users, controllers: { sessions: 'sessions' }, skip: [:registrations, :confirmations]
devise_scope :users do
get "login" => "sessions#new"
end
endhttps://stackoverflow.com/questions/28632844
复制相似问题