我有一些出租房源,我想作为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"}