Предполагая, что есть очень веская причина, чтобы один контроллер принял это действие (если есть общий код ... переместите его в вспомогательный метод или модель и используйте информацию агента пользователя или именованные маршруты в ваших интересах), проверьте параметр и перенаправьте на соответствующий контроллер и выполните действие:
def some_action
# some shared code here
if params[:platform] == 'iphone'
redirect_to :controller => 'foo', :action => 'bar'
elsif params[:platform] == 'web'
redirect_to :controller => 'baz', :action => 'baq'
else
# default controller and action here
end
end
Если вы действительно хотите, чтобы указанный маршрут отображался на разные контроллеры, вам нужно жестко закодировать строку платформы:
map.connect '/foo/bars/:id/iphone', :controller => 'iphone',:action=>'some_action'
map.connect '/foo/bars/:id/web', :controller => 'web',:action=>'some_action'
UPDATE0
Начиная с здесь , вы можете попробовать map.with_options(:conditions => ... )