правильный способ настроить URL холста facebook и маршруты в приложении rails - PullRequest
1 голос
/ 18 февраля 2010

У меня есть существующее приложение 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.

Ответы [ 2 ]

1 голос
/ 19 февраля 2010
0 голосов
/ 19 февраля 2010

Возможно, вы можете попытаться установить для callback_url значение http://my.host.ip/. В этом действии вы можете определить, поступил ли запрос от Facebook методом request_comes_from_facebook?, и перенаправить его на ваш контроллер Facebook, если это так.

Тогда ваши последующие ссылки будут работать.

...