Deviseルーティング: Rails.application.routesからルートを削除する方法はありますか? 質問する

Deviseルーティング: Rails.application.routesからルートを削除する方法はありますか? 質問する

devise_for削除したい DELETE ルートを含むルートを作成しますが、orオプションdevise_forはサポートされていません。:except:only

からルートを削除するにはどうすればいいですかRails.application.routes?drawブロック内か、それともその後ですか?


ルートを削除する必要があった理由となったバグの詳細は次のとおりです。

  • カスタムUJSコントローラーアクションにDELETEリクエストを発行していました

  • コントローラーアクションでは、必要なものを削除してから 302 リダイレクトを実行していました。これは悪いアイデアだったので、代わりに JSON を返すように修正しました。

  • 一部のクライアントは、302 を受信すると、リダイレクトに新しい DELETE 要求を発行し、それが Devise 削除ルートにルーティングされます。その結果、意図せず人物が削除されてしまいます。ひどい。これは GET であると想定していましたが、想定が間違っていました。

このバグは修正されましたが、それでもルートを削除したいと思います。


最終的に私が実行したことは、賞金獲得者がホセ・ヴァリム氏の言葉を引用して提案した次のことです。

ではconfig/routes.rb、呼び出しの上にこれを追加しましたdevise_for。これにより、残りの'people'ルートが設定されます。

delete '/person', :to => 'people#destroy'

次に、既存の にpeople_controller.rb、no-op メソッドを追加しました。

def destroy
  render :nothing => true
end

RouteSet からルートを削除する簡単な方法がないのが、いまだに少しイライラします。また、deletedevise コントローラーのルートはまだ存在しますが、rails が最初に一致したものを探してそれを返すため、呼び出されませんconfig/routes.rb

ベストアンサー1

Jose Valim(deviseの作者)はこう述べています。この件について何を言いたいのか:

ルートを個別に削除する方法はありません。または、:skip を使用してすべてを削除し、必要なものを手動で描画するか、config/routes.rb で最初に同じパスへのルートを定義してこのルートを上書きします。

したがって、質問に対する短い答えは、いいえ、そのルートを削除することはできません。もちろん、devise_for メソッドにパッチを適用するなどの作業を試すことはできますが、それはやや手間のかかる作業 (1 日または数日分の労力) になります。:skip オプションを使用して、そのコントローラーに必要なルートを実装し、不要なルートを省略します。

おすすめ記事