Ruby on rails 使用Kaminari时验证页码

Ruby on rails 使用Kaminari时验证页码,ruby-on-rails,pagination,rails-routing,kaminari,Ruby On Rails,Pagination,Rails Routing,Kaminari,我正在使用Kaminari处理分页。我最近发现许多虚假请求请求请求的页码无效,例如/post/page/undefined。因为我使用的是Solr,所以错误的页码被传递到了Solr中,并导致了500个错误 我希望能够验证页码,然后再将其传递给控制器。因此无效的页码将导致路由错误 我已经问过卡米纳里的创造者,还有。然而,我想知道是否有更干净的方法来做到这一点。我也不想在每一个可分页的资源中都包含这个逻辑,因为这一点都不枯燥 我的路线示例: resources :transactions do

我正在使用Kaminari处理分页。我最近发现许多虚假请求请求请求的页码无效,例如
/post/page/undefined
。因为我使用的是Solr,所以错误的页码被传递到了Solr中,并导致了500个错误

我希望能够验证页码,然后再将其传递给控制器。因此无效的页码将导致路由错误

我已经问过卡米纳里的创造者,还有。然而,我想知道是否有更干净的方法来做到这一点。我也不想在每一个可分页的资源中都包含这个逻辑,因为这一点都不枯燥

我的路线示例:

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

正如amatsuda在您提供的链接中所建议的,使用约束

请参考此(与您的类似)

我建议采用更安静的路线,如

resources :posts # or :transactions

然后对
/post/page/blah
的请求将是404(正如它们应该的那样),而对
/posts
请求将按照应用程序中的定义执行。

我认为一个好的解决方案是简单地删除或更正任何无效或琐碎的页面参数并重定向到更正的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
#这将进入相关控制器
过滤前:正确的页面参数!
#这将进入您的应用程序控制器
def正确的页面参数!
提供的参数=参数[:页]
如果提供了参数
正确的参数=提供给i的参数
如果适当的_参数<2
参数删除(:第页)
将_重定向到参数
elsif提供的参数!=正确的参数
将_重定向到params.merge(:only_path=>true,:page=>property_参数)
结束
结束
结束

希望这有帮助,祝你好运

您可以在如下路径中验证页面:

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

那么,有没有比他的解决方案更漂亮的方法来使用约束呢?我怎样才能在控制器之间以一种干燥的方式默认为第1页呢?我建议将页面从url中取出并放入查询字符串中。。。这样它是可选的。。。在控制器中,您可以调用
params[:page]| | 1
我想使用动作缓存,所以我使用了url方法。如果请求是
page=undefined
对不起,为什么在查询字符串中发送参数会阻止使用操作缓存,那么默认值为1将不起作用?