我也有類似的問題,解決它想:
resources :jobs do
collection do
constraints :state_id => /[a-z\-]+/ do
get ':state_id' => 'states#show', :as => :state
get ':state_id/:city_id' => 'cities#show', :as => :city
end
end
end
你不能在你的城市/州名稱數字!
/jobs/florida
去states#show
與STATE_ID =佛羅里達
/jobs/new-york
去states#show
與STATE_ID =新約克
/jobs/florida/orlando
去cities#show
與city_id =奧蘭多
有趣的來了!您可以使用蛞蝓你的工作,以及:
/jobs/1234-experienced-senior-programmer
去jobs#show
與1234-experienced-senior-programmer
爲ID,只是做params[:id].to_i
,你將獲得ID 1234 :)
的不那麼有趣的部分:
收集方法,如/jobs/new
就不管用了 - 你可以通過添加一個量詞像:state_id => /[a-z\-]{4,}/
改變此 這需要國家的名字至少有4個字符,所有3個字母的收集方法就像new
將被傳遞給控制器的工作像往常一樣
生成的路線:
state_jobs GET /jobs/:state_id(.:format) {:controller=>"states", :state_id=>/[a-z\-]+/, :action=>"show"}
city_jobs GET /jobs/:state_id/:city_id(.:format) {:controller=>"cities", :state_id=>/[a-z\-]+/, :action=>"show"}
jobs GET /jobs(.:format) {:controller=>"jobs", :action=>"index"}
POST /jobs(.:format) {:controller=>"jobs", :action=>"create"}
new_job GET /jobs/new(.:format) {:controller=>"jobs", :action=>"new"}
edit_job GET /jobs/:id/edit(.:format) {:controller=>"jobs", :action=>"edit"}
job GET /jobs/:id(.:format) {:controller=>"jobs", :action=>"show"}
PUT /jobs/:id(.:format) {:controller=>"jobs", :action=>"update"}
DELETE /jobs/:id(.:format) {:controller=>"jobs", :action=>"destroy"}
到目前爲止,所有給出的三個答案都非常出色,我選擇了這一個它的簡單。感謝您幫助導航菜鳥! – Jason
從3個答案選擇了一個不能解決你問題的答案 - 匹配'/ jobs'和'/ jobs/florida'。這一條路線只匹配完整路徑。 – MBO