#ruby-on-rails #devise #routes
#ruby-on-rails #разработка #маршруты
Вопрос:
Я использую Rails 3 и devise и пытаюсь сделать так, чтобы, когда пользователь заходит в мое веб-приложение, он переходил непосредственно по ссылке регистрации пользователя sign_up вместо ссылки входа.
Я почти уверен, что у меня возникла эта проблема, потому что мои маршруты настроены следующим образом:
root :to => "babies#new"
Для доступа к дочерней модели требуется, чтобы пользователь вошел в систему. Чтобы обойти это, я попытался изменить это на:
root:to => «пользователи #sign_up»
Похоже, это не работает? Я получаю сообщение об ошибке, в котором говорится, что у меня:
uninitialized constant UsersController
Кто-нибудь может подсказать, что я делаю не так?
Заранее спасибо!
Ответ №1:
Одним из решений является создание отдельного контроллера say main
и действия в нем sign_up_redirect
. Затем настройте свой файл маршрутов следующим образом:
root :to => "main#sign_up_redirect"
и напишите в этом действии следующее:
redirect_to new_user_registration_path
* путь к регистрации может отличаться для вас
Комментарии:
1. Это то, что вы имеете в виду? gist.github.com/1312293 . Я чувствую, что, возможно, что-то не так.
2. Эмм, в общем, да, но я не уверен в
Parents
константе, которую вы передаете методуnew_registration_path
, кстати:new_registration_path
правильное ли имя метода для URL-адреса регистрации?
Ответ №2:
Следующая ошибка возникает, когда соответствующий контроллер не найден. Вы должны проверить, используете ли вы UsersController или UserController
uninitialized constant UsersController
Ответ №3:
Если вы не просматриваете маршруты Devise, root :to => 'users#sign_up'
не существует. Я бы также настоятельно рекомендовал не устанавливать какой-либо маршрут Devise в качестве корневого, поскольку все хуки Devise перенаправляют на root, т.Е. after_sign_up
, after_sign_in
, after_update
. Я думаю, что для желаемого результата у вас есть два варианта.
Сначала нужно просто поместить форму регистрации на страницу по вашему корневому URL. Для этого вы можете следовать логике в этом руководстве, очевидно, перейдя от входа к регистрации.
Второй вариант, который легко приходит на ум, — это создать сквозной контроллер, который просто имеет индексное действие, перенаправляющее на страницу регистрации. Что-то подобное может выглядеть следующим образом.
class PassthroughController < ApplicationController
def index
redirect_to 'devise/registrations#new'
end
end
Любой вариант достаточно прост в реализации.