嘿!我试图在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