Странная ошибка в пути Devise после входа в систему с помощью /admins/sign_in, а не /admins

Я использую devise прямо сейчас и аутентифицируюсь с администраторами и пользователями (два разных типа входа). Все работает нормально, если я захожу в .../admins и .../users. Однако, когда я перехожу по URL-адресу /admins/sign_in, после входа он автоматически перенаправляет меня обратно на домашнюю страницу, а не на страницу /admins, как я хочу. Есть ли способ перенаправить его после URL-адреса /sign_in?


person George Tang    schedule 02.02.2011    source источник


Ответы (2)


В routes.rb убедитесь, что вы включили эти именованные пути.

map.user_root '/users/edit', :controller => 'users', :action => "edit"
map.admin_root '/admin/edit', :controller => 'users', :action => "edit"

Я делаю это, чтобы он перенаправлялся на настройки использования.

Обновлять

Я все еще на 2.3.8, поэтому для рельсов 3 вам нужно будет использовать это:

root :to => "home"

Вы можете найти его здесь: https://github.com/plataformatec/devise

Обновлять

На самом деле первый код, который я опубликовал, должен работать для всех версий рельсов. И простое перечисление корня по умолчанию является значением по умолчанию для всех ресурсов разработки.

person thenengah    schedule 02.02.2011
comment
Что это за версия для рельсов 3? Я попробовал admin_root для: admin#edit, и это не сработало. - person George Tang; 02.02.2011
comment
Я получаю эту ошибку, когда пытаюсь выполнить ваш код block in <top (required)>': undefined local variable or method map для #‹ActionDispatch::Routing::Mapper:0x00000100bba7a0› (NameError) - person George Tang; 04.02.2011
comment
Попробуйте удалить map.user_root и просто используйте user_root. Если это не сработает, вам нужно будет исследовать маршруты rails 3. - person thenengah; 05.02.2011
comment
Rails 3 больше не использует карту в route.rb, вы можете использовать что-то вроде: match user_root => users#edit - person Braden Becker; 05.02.2011

Когда вы войдете в систему, devise запустит метод after_sign_in_path_for(resource_or_scope), чтобы определить, куда идти, по умолчанию этот метод будет искать путь admin_root, и если он не существует, он перенаправит пользователей на корневой путь. Другим вариантом было бы перезаписать этот метод. Пожалуйста, взгляните на мой ответ на этот вопрос для получения дополнительной информации. Детали.

Для получения дополнительной информации взгляните на разработать документацию.

person Braden Becker    schedule 03.02.2011