注:いつものように、私はここで質問するためにそれを明確にする過程で私の問題を解決しました! 解決策は終わりです。
Rails がデバイス招待 URL リクエストを適切な場所に送信していません。
私が行くとき:
http://localhost:3000/users/invitation/accept?invitation_token=SOME_TOKEN
ブラウザはルートにリダイレクトするだけです。
routes.rb は、次のようなカスタム デバイス コントローラーにリクエストを送信しています。
devise_for :users, :controllers => { passwords: 'passwords', sessions: "sessions", invitations: 'users/invitations'}
devise.rb では、スコープ ビューが有効になっています。
config.scoped_views = true
レーキルートは私に与えます:
accept_user_invitation GET /users/invitation/accept(.:format) users/invitations#edit
users/invitations_controller.rb は次のようになります。
class Users::InvitationsController < Devise::InvitationsController
def edit
# Try to catch rails if it resolves to this method like i want it to!
# It fails to get here, though.
byebug # elsewhere in my code, byebug successfully acts as breakpoint
super
end
end
では、なぜルートにリダイレクトされるのでしょうか。
カスタム編集メソッドに解決するようにしましたが、招待コントローラーを削除し、devise_for
名前を変更して (「受け入れ」として)、明示的にルートにすることによってのみ:
devise_scope :user do
scope'/users' do
get '/invitation/accept' => 'users/invitations#accept', as: 'custom_accept_user_invitation'
end
end
これがキャッシュの問題である場合は、Chrome の DNS キャッシュを消去し、Rails サーバーと redis-server を再起動して、rake tmp:cache:clear を実行しました。
更新: 解決策
問題は、私がすでに他のアカウントを使用して自分のサイトにサインインしていたため、devise_invitable の招待を受け入れようとすると、devise がルートにリダイレクトしてしまうことでした!
ログアウトして再度 URL を試してみたところ、うまくいきました。