我正在使用Kaminari来处理分页。我最近发现很多虚假请求正在请求无效的页码,例如/post/page/undefined
。由于我使用的是Solr,因此传入错误的页码并导致500错误。
我希望能够在传递给控制器之前验证页码。因此,无效的页码将导致路由错误。
我问过Kaminari的创造者,he gave a temporary solution。但是我想知道是否有更清洁的方法来做到这一点。我也不想在每个可分页资源中包含这个逻辑,因为它根本就不会干。
我的路线示例:
resources :transactions do
get 'page/:page', :action => :index, :on => :collection
end
答案 0 :(得分: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
希望这有帮助,祝你好运!
答案 1 :(得分:-1)
正如amatsuda在您提供的链接中所建议的那样,使用约束。
请参阅此question(与您的类似)...
我建议采用更多RESTful路由,由
描述resources :posts # or :transactions
然后/post/page/blah
的请求将是404(他们应该),而GET
对/posts
的请求将按照您的应用中的定义行事。
答案 2 :(得分:-1)
您可以在以下路线中验证页面:
resources :transactions do
get 'page/:page', :action => :index, :on => :collection, :page => /\d/
end