2011-09-06 100 views
1

我有一個面向另一個應用程序的Rails 2.3.12應用程序。致電其他應用foo;發送到我的應用程序的所有URI將以/foo開頭。我的Rails應用程序需要處理這些案件:Rails 2.3.12:分別路由'GET/foo','PUT/foo'和'<any>/foo/bar'

  1. GET /foo - 我的應用程序直接處理(返回一個什麼樣的支持列表)
  2. <anything-else> /foo - 返回401(GET是唯一支持的HTTP動詞)
  3. <anything> /foo/<anything> - 由我的應用程序處理,傳遞給foo應用程序。

不幸的是,我所有的努力迄今已造成一切由兩種情況1 & 2或情況3.這列裝就是我在我的routes.rb的時刻:

 map.root(:controller  => 'application', 
       :action   => 'render_401_unauthorised') 
    map.connect('fooapp/*fooapp_ep_path', 
       :controller  => 'foo', 
       :action   => 'parsepath') 
    map.connect('fooapp', 
       :controller  => 'other_controller', 
       :action   => 'index', 
       :conditions  => { :method => :get }) 
    map.connect('fooapp', 
       :controller  => 'application', 
       :action   => 'render_401_unauthorised') 

我想我的問題會消失,如果我能保證在第一map.connect只有比賽如果*fooap_ep_path不爲空 - ,正則表達式匹配%r!/foo/.+!

可以這樣做嗎?

謝謝!

更新如果有任何的方式來指定一個水珠路徑必須將[無]空,這可能會提供必要的膠水。

回答

0

我工作了這一點,使用#with_options沿

map.with_options({}) do |ap,*args| 
    ap.name1('fooapp', 
      :controller => 'can_do', 
      :action  => 'index', 
      :conditions => { :method => :get } 
     ) 
    ap.name2('fooapp', 
      :controller => 'can_do', 
      :action  => 'render_403_forbidden' 
     ) 
    ap.name3('fooapp/*fooapp_path', 
      :controller => 'other', 
      :action  => 'do_it' 
     ) 
end