6

destroyIP アドレスをパラメーターとしてURLの Rails メソッドに送信しようとしています。パラメータに.;が含まれていると問題があります。エラーがnot found発生しました。これは生成されたログです。

Started DELETE "/admin/user/stefan-admin/whitelist/4.3.2.1" for 127.0.0.1 at 2013-07-17 09:31:18 +0100
Processing by ErrorsController#error_404 as 
  Parameters: {"not_found"=>"admin/user/stefan-admin/whitelist/4.3.2"}
WARNING: Can't verify CSRF token authenticity
Session: {:user=>"admin", :role=>:admin, :user_id=>"stefan-admin"}
Completed 404 Not Found in 30ms (Views: 1.1ms | ActiveRecord: 0.0ms)

メッセージのnot foundIP アドレスが切り詰められています。.たとえば、なしでパラメーターを使用すると、エラーは発生abcせず、メソッドが呼び出されます。not founddestroy

.Rails は URL を受け取りましたが、おそらく拡張機能として処理しているため、内部でそれを壊しました。この動作をオフにするか、URL をエスケープして回避する方法はありますか?

4

4 に答える 4

5

パラメータにドットを許可するには、ルートに制約を追加する必要があります

リソース :whitelists, :constraints => { :id => /[0-9.]+/ }

または、routes.rb にそのようなものがあります。ルートの書き方によって異なりますが、制約の部分は同じままです。

于 2013-07-17T09:11:44.813 に答える
1

一見すると、パラメータやルーティングを操作することで問題を解決できます。もう少し考えてみると、スキームにさらに 2 つの問題があることに気付くでしょう。

  1. GET リクエストを使用して削除アクションを処理しました
  2. 名前の拡張子ではない場合、URL のドットは非常に醜いです。

したがって、問題を直接解決する代わりに、次のことをお勧めします。

リクエスト リンクを含むビュー コードを確認します。button_to、またはlink_towithdeleteメソッドとUJSサポートである方が良いです。

これにより、URL に ip なしで POST 要求をサーバーに送信します。また、コントローラー コードを変更する必要はありません。

于 2013-07-17T09:20:28.950 に答える