我有一些租赁列表,我希望可以作为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 param需要具有优先级,因此我将路由更改为:
get ':area' => 'rentals#index', :area => /(?!rentals)[a-zA-Z0-9\-]+/, :as => :area
resources :rentals
但是当我尝试在控制台中识别路线时,我得到:
ActionController::RoutingError: No route matches {:controller=>"rentals", :area=>"downtown"}
我不确定如何解决这个问题,所以任何帮助都会受到赞赏。
答案 0 :(得分:2)
您可以在路线约束中使用lambdas来解决此问题
match ':area' => 'rentals#index', :constraints => lambda{|req| !req.env["REQUEST_URI"].include? "rentals"}