Rails 3路由中的正则表达式约束为负



我有一些出租房源,我想作为RESTful资源访问,但也可以通过:area参数过滤索引,该参数可以是邻居或地区。考虑到"租赁"资源,我想要

/rentals

以及根级别的:区域参数过滤

/downtown
/westside
/some-neighborhood
etc.

我想我可以通过在我的路线文件底部附近放以下内容来实现这一点:

resources :rentals
get ':area' => 'rentals#index', :area => /[a-zA-Z0-9-]+/, :as => :area

但当我添加Kaminari进行分页时,它会自动生成分页链接,看起来像

/rentals?area=downtown&page=2

当我宁愿它看起来像

/downtown?page=2

为了让Kaminari使用命名的路由版本,:area参数需要具有优先级,所以我将路由更改为:

get ':area' => 'rentals#index', :area => /(?!rentals)[a-zA-Z0-9-]+/, :as => :area
resources :rentals

但当我试图在控制台中识别路线时,我得到了:

ActionController::RoutingError: No route matches {:controller=>"rentals", :area=>"downtown"}

我不知道如何解决这个问题,所以任何帮助都将不胜感激。

您可以在路线约束中使用lambdas来解决这个问题

match ':area' => 'rentals#index', :constraints => lambda{|req|  !req.env["REQUEST_URI"].include? "rentals"}

最新更新