У меня есть существующее приложение rails, к которому я добавляю новый контроллер для обработки запросов из небольшого приложения facebook (с помощью плагина facebooker), которое я создаю.
В настройках приложения facebook я установил URL обратного вызова canvas на http://my.host.ip/fb/
В чистом приложении Facebook URL-адрес не будет отображаться в / fb /, и пользователь будет перенаправлен на домашнюю страницу приложения. но так как это существующее приложение, я не могу этого сделать.
Теперь у меня в route.rb:
map.connect '/fb/like/:id', :controller => 'facebook_app', :action => "like"
map.connect '/fb/:category', :controller => 'facebook_app', :action => "index", :category => "default"
Ao, когда пользователь посещает http://apps.facebook.com/my_app_name/, Facebook звонит на http://my.host.ip/fb/, и это прекрасно.
На этой странице у меня есть ссылки на действие "Мне нравится":
<%= link_to "like", :controller => "fb", :action => "like", :id => id %>
Единственная проблема заключается в том, что они отображаются как:
http://apps.facebook.com/my_app_name/fb/like/12345
Когда я хочу:
http://apps.facebook.com/my_app_name/like/12345
Видите, как / fb / вызывает у меня горе?
Есть ли способ обойти это? Или как-то в определении маршрутов сказать, что / fb / был только для входящих URL? или каким-то образом в генераторе URL опустить / fb /?
Я нашел один обходной путь ... если я добавлю этот маршрут выше существующего маршрута "like":
map.connect '/like/:id', :controller => 'facebook_app', :action => "like"
Тогда этот первый маршрут используется генератором URL-адреса link_to, и генерируется правильный URL:
http://apps.facebook.com/my_app_name/like/12345
Который при нажатии заставляет фейсбук сделать этот запрос моему приложению:
http://my.host.ip/fb/like/12345
Что соответствует оригинальному «подобному» маршруту.
Я бы предпочел не делать это для каждого действия в моем контроллере facebook.