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