2011-09-06 16 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アプリに渡されます。

     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') 
    
    :残念ながら、私の試みのすべては、これまですべてのいずれかの場合1 & 2またはケース3によって擁立されは、ここで私は、現時点では私のroutes.rbに持っているものだもたらした

は私が保証することができれば私の問題は、離れて行くだろうと思う最初map.connectでしょう*fooap_ep_pathが空でない場合にのみ試合 - すなわちは、正規表現にマッチし%r!/foo/.+!

これはできますか?

ありがとうございます!グロブパス [非]空でなければならないことを指定するにはどのような方法がある場合は

を更新することは、それはおそらく、必要な接着剤を提供することになります。

答えて

0

私は

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 
の線に沿って #with_optionsを使用して、これを働きました