2015-02-20 4 views
1

Я получаю следующее сообщение об ошибке при попытке перейти к http://app.mysite.dev/login -Rails и Разрабатывают Mapping Путь

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 для пользователей> Агенты.

Итак, я уже определяю рамки для разработки, и я не тестирую, поэтому любые идеи о том, что происходит?

+0

Можете ли вы показать нам свое '' приложение :: SessionController''? – dgilperez

+0

У меня его нет - я предполагаю, что это происходит из Devise .. – Advocation

ответ

0

Кажется, вы не определили пользовательские SessionsController для вашего :users и Devise не может использовать его по умолчанию один, так как вы в пространстве имен вашего 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 
end 
+0

Вы также имеете в виду для 'App :: SessionsController' для наследования от' Devise :: SessionsController'? Если я это сделаю, то получаю ту же проблему, что и раньше, и если я не уверен, что я потеряю использование Devise в этих сессиях? – Advocation

+0

Вам нужно наследовать от '' Devise :: SessionsController'' конечно. Посмотрите документы de Devise для дальнейшей справки, если это необходимо. Если вы определяете '' App :: SessionsController'', а ваш '' get 'login' => "session # new" 'route - это namespaced с' 'app'', вы должны иметь возможность правильно использовать этот маршрут. Можете ли вы показать мне вывод '' rake routes'' в этом случае? – dgilperez

+0

Итак, наследование от 'Devise :: SessionsController' просто производит ту же ошибку, которую я получал раньше, с той лишь разницей, что мне теперь не нужно делать' get 'login "=>" session # new "' в пределах 'devise_scope: users'. Рейк-маршруты для входа: 'app_login GET /login(.:format) app/sessions # new {: subdomain =>" app "}' – Advocation

1

Попробуйте заменить devise_scope следующим вместо. В вашем блоке приложения «приложение».

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

0

Это просто просто опечатка - devise_scope :users должен быть devise_scope :user, как указано в сообщении об ошибке.

Смежные вопросы