我有一个面向另一个应用程序的Rails 2.3.12应用程序。致电其他申请foo
;发送到我的应用的所有URI都将以/foo
开头。我的Rails应用程序需要处理这些情况:
GET /foo
- 我的应用直接处理(返回支持的列表)<anything-else> /foo
- 返回401(即。,GET
是唯一受支持的HTTP动词)<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
仅匹配,我的问题就会消失 - ie ,匹配正则表达式%r!/foo/.+!
可以这样做吗?
谢谢!
已更新如果有任何方法可以指定必须为<非>为空,那么这可能会提供必要的粘合剂。
答案 0 :(得分: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