0

私は本当にここに何かが欠けています。

私はデバイスのリダイレクトについて多くのことを読みました (ほとんどの人にとって実装するのは難しいようです...) が、私の場合は本当にわかりません。

after_<action>_path_for(resource)メソッドは にあるはずだと読むこともあればApplicationController、デバイスのコントローラーをオーバーライドして、特定のコントローラーにあることが言及されていることもあります。

リダイレクトのためだけにコントローラーをさらに作成するのは面倒なので、それらを自分の中に入れたいと思いますApplicationControllerが、最後にそれが不可能な場合は、主張しません...

契約は次のとおりです。

私は私の中に持っていますApplicationController:(そして他のいくつかですが、例にはそれで十分です)

  def after_update_path_for(user)
    flash[:notice] = 'Successfully updated password'
    edit_user_path(user)
  end

  def after_inactive_sign_up_path_for(user)
    flash[:notice] = 'Welcome! Please follow the steps!'
    me_new_path
  end

  def after_sign_up_path_for(user)
    flash[:notice] = 'Welcome! Please follow the steps!'
    me_new_path
  end

  def after_sign_in_path_for(user)
    if user.sign_in_count == 1
      me_new_path
    else
      root_path
    end
  end

そしてクレイジーなことは、それafter_sign_in_path_forが呼び出されますが、他のものは呼び出されないということです。ユーザーがサインアップするときのように、ユーザーif user.sign_in_count == 1をリダイレクトするのは ではなくafter_inactive_sign_up_path_forですafter_sign_up_path_for

どうして?

それは私のルートに関連している可能性があるので、ここに私のroutes.rb抜粋があります:

  devise_for :user, :skip => [:sessions, :registrations], :path => ''
  devise_scope :user do
    get :register, :to => 'devise/registrations#new'
    post :register, :to => 'devise/registrations#create'
    put :update_password, :to => 'devise/my_registrations#update'
    get :login, :to => 'devise/sessions#new'
    get :login, :to => 'devise/sessions#new', :as => :new_copasser_session
    post :login, :to => 'devise/sessions#create'
    delete :logout, :to => 'devise/sessions#destroy'
  end

Ruby 1.9.3 と Rails 3.2.13 で Devise 3.1.0 を使用しています。

助けてくれてありがとう!


編集

@rich-peck さん、ご回答ありがとうございます。私はroutes.rbこのように更新しました:

  devise_for :users, :path => '', :path_names => { 
    :sign_in => :login,
    :registration => :register,
    :sign_up => '',
    :sign_out => :logout
  }

これにより、以前のものと同じルートが得られます (login_pathヘルパーを使用できなくなったことを除いて、大したことではありません) が、リダイレクトに関しては同じ結果が得られます。

の結果は次のrake routesとおりです。

                       new_user_session GET    /login(.:format)                                               devise/sessions#new
                           user_session POST   /login(.:format)                                               devise/sessions#create
                   destroy_user_session DELETE /logout(.:format)                                              devise/sessions#destroy
                          user_password POST   /password(.:format)                                            devise/passwords#create
                      new_user_password GET    /password/new(.:format)                                        devise/passwords#new
                     edit_user_password GET    /password/edit(.:format)                                       devise/passwords#edit
                                        PUT    /password(.:format)                                            devise/passwords#update
               cancel_user_registration GET    /register/cancel(.:format)                                     devise/registrations#cancel
                      user_registration POST   /register(.:format)                                            devise/registrations#create
                  new_user_registration GET    /register(.:format)                                            devise/registrations#new
                 edit_user_registration GET    /register/edit(.:format)                                       devise/registrations#edit
                                        PUT    /register(.:format)                                            devise/registrations#update
                                        DELETE /register(.:format)                                            devise/registrations#destroy
                      user_confirmation POST   /confirmation(.:format)                                        devise/confirmations#create
                  new_user_confirmation GET    /confirmation/new(.:format)                                    devise/confirmations#new
                                        GET    /confirmation(.:format)                                        devise/confirmations#show

何か案が?

4

2 に答える 2

1

Devise は、「リソース」と呼ばれる中心的な変数に大きく依存しています。この変数は、devise がシステム上でどのように動作するかを定義します。これが、Devise を :users などに「アタッチ」する必要がある理由です。

規約に従わず、どこにでもフォームを置いているため、人々は Devise で問題を抱えています。彼らがDeviseのreadmeを読んだら、それが非常に柔軟であることを感謝するでしょう:)

あなたの問題は、これらすべての静的ルートを次のようなものに統合したいという点で、ルートに関係していると思います。

devise_for :users, :path => '', :controllers => {:sessions => 'sessions', :registrations => 'registrations'}, :path_names => { :sign_in => 'login', :password => 'forgot', :confirmation => 'confirm', :unlock => 'unblock', :registration => 'register', :sign_up => 'new', :sign_out => 'logout'}
于 2013-10-18T14:31:56.030 に答える