我在尝试转到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_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
这只是一个简单的拼写错误——devise_scope :users
应该是devise_scope :user
,如错误消息中所述。
您似乎没有为您的:users
定义自定义SessionsController
,而Devise
无法使用它的默认CCD_7。
我会定义你自己的自定义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
end