Как: Разработать after_sign_up_redirect? - PullRequest
4 голосов
/ 04 июля 2011

Я пытался следовать инструкциям здесь ( GitHub Devise Wiki ), но он не работает для меня.

Я пытаюсь заставить Devise перенаправлять / приветствовать после регистрации пользователя,Я создал контроллер Registrations , но он никогда не будет виден.Что я тут не так делаю?

Ruby 1.9.2 Rails 3.1.0.rc4 Devise 1.4.2

Спасибо

ОБНОВЛЕНИЕ:

По какой-то причине after_sign_up_path_for не запускается, а after_sign_in_path_for запускается.Я все еще хотел бы заставить after_sign_up_path_for работать, хотя

_app / controllers / registrations_controller.rb_

class RegistrationsController < Devise::RegistrationsController
  protected

  def after_sign_up_path_for(resource)
    welcome_path
  end
end

Вот мой config / routs.rb

MyApp::Application.routes.draw do
  devise_for :users

  root :to => 'pages#home'

  match "/users", :to => "users#all"
  match "/users/:id", :to => "users#show", :as => :user

  match "/welcome", :to => "users#welcome", :as => :user

  devise_for :users, :controllers => { :registrations => "registrations" } do
    get "/login", :to => "devise/sessions#new"
    get "/register", :to => "devise/registrations#new"
    get "/logout", :to => "devise/sessions#destroy"
    get '/account' => 'devise/registrations#edit'
  end
end

Вывод из рейк-маршрутов

new_user_session GET    /users/sign_in(.:format)               {:action=>"new", :controller=>"devise/sessions"}
user_session POST   /users/sign_in(.:format)               {:action=>"create", :controller=>"devise/sessions"}
    destroy_user_session DELETE /users/sign_out(.:format)              {:action=>"destroy", :controller=>"devise/sessions"}
  user_omniauth_callback        /users/auth/:action/callback(.:format) {:action=>/(?!)/, :controller=>"devise/omniauth_callbacks"}
           user_password POST   /users/password(.:format)              {:action=>"create", :controller=>"devise/passwords"}
       new_user_password GET    /users/password/new(.:format)          {:action=>"new", :controller=>"devise/passwords"}
      edit_user_password GET    /users/password/edit(.:format)         {:action=>"edit", :controller=>"devise/passwords"}
                         PUT    /users/password(.:format)              {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET    /users/cancel(.:format)                {:action=>"cancel", :controller=>"devise/registrations"}
       user_registration POST   /users(.:format)                       {:action=>"create", :controller=>"devise/registrations"}
   new_user_registration GET    /users/sign_up(.:format)               {:action=>"new", :controller=>"devise/registrations"}
  edit_user_registration GET    /users/edit(.:format)                  {:action=>"edit", :controller=>"devise/registrations"}
                         PUT    /users(.:format)                       {:action=>"update", :controller=>"devise/registrations"}
                         DELETE /users(.:format)                       {:action=>"destroy", :controller=>"devise/registrations"}
                    root        /                                      {:controller=>"pages", :action=>"home"}
                   users        /users(.:format)                       {:controller=>"users", :action=>"all"}
                    user        /users/:id(.:format)                   {:controller=>"users", :action=>"show"}
                    user        /welcome(.:format)                     {:controller=>"users", :action=>"welcome"}
                   login GET    /login(.:format)                       {:controller=>"devise/sessions", :action=>"new"}
                register GET    /register(.:format)                    {:controller=>"devise/registrations", :action=>"new"}
                  logout GET    /logout(.:format)                      {:controller=>"devise/sessions", :action=>"destroy"}
                 account GET    /account(.:format)                     {:controller=>"devise/registrations", :action=>"edit"}
        new_user_session GET    /users/sign_in(.:format)               {:action=>"new", :controller=>"devise/sessions"}
                         POST   /users/sign_in(.:format)               {:action=>"create", :controller=>"devise/sessions"}
    destroy_user_session DELETE /users/sign_out(.:format)              {:action=>"destroy", :controller=>"devise/sessions"}
  user_omniauth_callback        /users/auth/:action/callback(.:format) {:action=>/(?!)/, :controller=>"devise/omniauth_callbacks"}
                         POST   /users/password(.:format)              {:action=>"create", :controller=>"devise/passwords"}
                         GET    /users/password/new(.:format)          {:action=>"new", :controller=>"devise/passwords"}
                         GET    /users/password/edit(.:format)         {:action=>"edit", :controller=>"devise/passwords"}
                         PUT    /users/password(.:format)              {:action=>"update", :controller=>"devise/passwords"}
                         GET    /users/cancel(.:format)                {:action=>"cancel", :controller=>"registrations"}
                         POST   /users(.:format)                       {:action=>"create", :controller=>"registrations"}
                         GET    /users/sign_up(.:format)               {:action=>"new", :controller=>"registrations"}
                         GET    /users/edit(.:format)                  {:action=>"edit", :controller=>"registrations"}
                         PUT    /users(.:format)                       {:action=>"update", :controller=>"registrations"}
                         DELETE /users(.:format)                       {:action=>"destroy", :controller=>"registrations"}

Ответы [ 6 ]

5 голосов
/ 04 июля 2011

У вас есть devise_for :users дважды в вашем маршруте.rb.Измените route.rb следующим образом:

MyApp::Application.routes.draw do
  devise_for :users, :controllers => { :registrations => "registrations" } do
    get "/login", :to => "devise/sessions#new"
    get "/register", :to => "devise/registrations#new"
    get "/logout", :to => "devise/sessions#destroy"
    get '/account' => 'devise/registrations#edit'
  end

  root :to => 'pages#home'

  match "/users", :to => "users#all"
  match "/users/:id", :to => "users#show", :as => :user

  match "/welcome", :to => "users#welcome", :as => :user

end

Если у вас есть логика активации / деактивации, вы также должны переопределить after_inactive_sign_up_path_for, как упомянуто в вики устройства.Можете ли вы сказать, куда он перенаправляется после регистрации?

Причина, по которой after_sign_in_path_for работает, может заключаться в том, что у вас один и тот же session_controller и разные registrations_controller, поэтому вход в систему работает, как вы ожидали, и маршрут регистрации блокируется, потому что вы определили его дважды, поэтому всезапросы на регистрацию и действия выполняются в устройстве / регистрации, а не в вашем контроллере пользовательских регистраций.

Удалите это, измените маршруты. Как указано выше, и посмотрите, что произойдет.

2 голосов
/ 04 июля 2011

У вас есть повторяющиеся списки devise_for в вашем файле rout.rb. Попробуйте удалить первый, простой devise_for: users, и оставить только второй.

2 голосов
/ 04 июля 2011

Ваш devise_for выглядит немного странно. after_sign_up_path_for должен нормально работать в вашем application_controller.rb

Измените ваш файл маршрутов на devise_for :users, а также поместите after_sign_up_path_for в ваш application_controller.rb

1 голос
/ 04 июля 2011

В моем приложении у меня есть метод after_sign_in_path_for в моем файле application_controller.rb. Попробуйте вставить его туда, перезагрузите сервер и посмотрите, будет ли это иметь значение. Кроме того, мой метод не указан в protected, а скорее private.

0 голосов
/ 31 июля 2011

Инструкции для меня работали нормально (новый контроллер Registrations, измените route.rb и скопируйте представления регистрации в app / view / registrations), но мне нужно было немного изменить мой route.rb, чтобы были подобраны контроллеры регистрации. Заказ важен, так как будет использоваться первый соответствующий маршрут - и вы хотите, чтобы он был новым маршрутом регистрации.

devise_for: users,: controllers => {: registrations => "registrations"}

devise_for: пользователи

(убедитесь, что devise_for: пользователи приходят после нового маршрута для регистрации)

https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb#L82

0 голосов
/ 04 июля 2011

Если вы хотите перенаправить пользователей на страницу приветствия после регистрации, похоже, что вы просто хотите перенаправить их после успешного создания пользователя. Таким образом, ваш users_controller будет выглядеть примерно так:

class UsersController < ApplicationController
  def new  
      @user = User.new  
  end  

  def create  
    @user = User.new(params[:user])  
    if @user.save
      flash[:notice] = "Registration successful."  
      redirect_to welcome_path  
    else  
      render :action => 'new'  
    end  
  end

  def show
    @user = User.find(params[:id])
  end

  def edit
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(params[:user])
      flash[:notice] = "Successfully updated user."
      redirect_to @user
    else
      render :action => 'edit'
    end
  end
end
...