2011-06-05 84 views
2

我有一些租賃列表,我希望可以作爲RESTful資源訪問,但也要通過:area參數(可能是鄰域或區域)過濾索引。鑑於「租金」的資源,我想有Rails 3路由中的負面正則表達式約束

/rentals 

還有:在根級別

/downtown 
/westside 
/some-neighborhood 
etc. 

我以爲我能得到這個工作,通過將區域PARAM濾波下面靠近我的路線底部文件:

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

但是,當我加入了雷分頁,它會自動生成分頁鏈接看起來像

/rentals?area=downtown&page=2 

時,我寧願它看起來像

/downtown?page=2 

爲了得到雷到使用命名路由版本的:面積PARAM需要有優先權,所以我改變了路線:

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

但是,當我試圖識別在控制檯的路線,我得到:

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

我不知道如何解決這個問題,所以任何幫助將不勝感激。

回答

2

您可以使用lambda表達式在你的路由約束來解決這個問題

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

這爲我工作,但我不得不括號添加到'.INCLUDE?'通話 – 2012-01-17 03:26:58