Как мне сделать так, чтобы на главной странице моего приложения по умолчанию была регистрация пользователя, а не вход с помощью devise?

#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
  

Любой вариант достаточно прост в реализации.