嘿!我試圖在Rails應用程序中設置路由,以便根據傳遞的參數類型,Rails將請求發送到不同的操作。Rails:通過檢測參數來映射衝突路由
我有courses
它有一個屬性state
這是一個字符串與兩個字母的狀態縮寫。當用戶訪問/courses/1
時,我希望Rails在courses
控制器中顯示show
操作(並將參數傳遞爲:id
)。但是,當用戶訪問/courses/CO
時,我希望Rails顯示index
操作並將參數傳遞爲:state
。
所以/courses/1
將相當於
:controller => 'courses', :action => 'show', :id => '1'
而且/courses/CO
將相當於
:controller => 'courses', :action => 'index', :state => 'CO'
我已經試過這樣:
map.resources :courses, :except => { :index, :show }
map.connect 'courses/:state', :controller => 'courses', :action => 'index', :state => /[A-Z]{2}/
map.connect 'courses/:id', :controller => 'courses', :action => 'show', :id => /[0-9]+/
但它打破(Rails服務器不會甚至開始)。我通常不會用路線做這樣的事情,所以我超出了我的技術訣竅。謝謝!
編輯:修正了一個錯字,謝謝JC。
目前的解決辦法是這樣的:
map.resources :courses, :except => [ :index, :show ]
map.courses '/courses', :controller => 'courses', :action => 'index', :state => 'AL', :method => :get
map.courses '/courses/:state', :controller => 'courses', :action => 'index', :requirements => { :state => /[A-Z]{2}/ }, :method => :get
map.course '/courses/:id', :controller => 'courses', :action => 'show', :requirements => { :id => /[0-9]+/ }, :method => :get
會允許默認情況下(無參數)阻止我必須更改所有這些鏈接? EG: 'map.connect'/ courses',:controller =>'courses',:action =>'index',:state =>'AL',:method =>:get' – Jay 2010-06-29 15:18:55