3

私はページ付けを処理するためにカミナリを使用しています。最近、多くの偽のリクエストが、などの無効なページ番号をリクエストしていることがわかりました/post/page/undefined。Solrを使用しているため、不正なページ番号が渡され、500エラーが発生します。

コントローラに渡される前に、ページ番号を検証できるようにしたい。したがって、ページ番号が無効な場合は、代わりにルーティングエラーが発生します。

カミナリの作者に聞いてみたところ、一時的な解決策を教えてくれました。しかし、これを行うためのよりクリーンな方法があるかどうか疑問に思っています。また、このロジックをすべてのページ可能なリソースに含めたくありません。これは、DRYではないためです。

私のルートの例:

resources :transactions do
  get 'page/:page', :action => :index, :on => :collection
end
4

3 に答える 3

0

良い解決策は、無効または軽薄なページパラメータを削除または修正し、次のように修正されたURLにリダイレクトすることです。

# This goes in your relevant controller(s)
before_filter :correct_page_parameters!

# This goes in your application controller
def correct_page_parameters!
  supplied_parameters = params[:page]
  if supplied_parameters        
    proper_parameters = supplied_parameters.to_i

    if proper_parameters < 2
      params.delete(:page)
      redirect_to params
    elsif supplied_parameters != proper_parameters.to_s
      redirect_to params.merge(:only_path => true, :page => proper_parameters)
    end
  end
end

これがお役に立てば幸いです。

于 2012-11-03T07:57:53.300 に答える
-1

提供したリンクでamatsudaが示唆しているように、制約を使用します。

この質問を参照してください(あなたの質問と同様)...

によって説明されている、よりRESTfulなルートを採用することをお勧めします

resources :posts # or :transactions

次に、へのリクエスト/post/page/blahは404(必要に応じて)になりますが、GETへのリクエスト/postsはアプリケーションで定義されたとおりに動作します。

于 2012-10-30T20:12:19.060 に答える
-1

次のようなルートでページを検証できます。

resources :transactions do
  get 'page/:page', :action => :index, :on => :collection, :page => /\d/
end
于 2013-09-15T21:18:55.323 に答える