3

我正在使用 Kaminari 来处理分页。我最近发现很多虚假请求都在请求无效的页码,例如/post/page/undefined. 由于我使用的是 Solr,错误的页码被传入其中并导致 500 错误。

我希望能够在将页码传递给控制器​​之前对其进行验证。所以无效的页码反而会导致路由错误。

我问了 Kaminari 的创建者,他给出了一个临时解决方案。但是我想知道是否有更清洁的方法可以做到这一点。我也不想在每个可分页资源中都包含这个逻辑,因为那根本不是 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/blah404 的请求(应该如此),而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 回答