Я рекомендую использовать другой маршрут для вкладок Facebook.Поэтому, если ваши обычные URL-адреса выглядят так:
/foobar
Тогда вы можете использовать что-то подобное для Facebook, добавив префикс "/ fb" (или аналогичный) на вкладку вашего приложения Facebook или URL-адрес холста:
/fb/foobar
В вашем rout.rb вы можете затем передать параметр, указывающий, что пользователь просматривает страницу в Facebook, например, "channel = facebook" или "facebook = true".
Ваш route.rb может выглядеть примерно так:
scope 'fb', :channel => 'facebook' do
# ... your routes ...
end
scope :channel => 'web' do
# ... your routes ...
end
При использовании этих маршрутов каждый запрос, исходящий из Facebook, автоматически будет иметь параметр "channel = facebook".Конечно, вы все равно будете нести ответственность за создание соответствующих URL-адресов в своем приложении.Вы можете добавить :as => 'facebook'
и :as => web
к областям выше и использовать это для генерации URL с помощью выделенных помощников (например, facebook_foobar_url
, web_foobar_url
).Но лучший способ сделать это во многом зависит от сложности вашего приложения.
В качестве альтернативы, вы также можете использовать default_url_options
в вашем контроллере для добавления параметра "channel = facebook" или "facebook = true"на каждый сгенерированный URL, если вы обнаружите, что текущий запрос исходил от Facebook (либо от наличия подписанного подписи, либо от добавленного вами параметра channel / facebook).Обратите внимание, что этот метод устарел в Rails 3, и я не совсем уверен, какая (если таковая имеется) официальная замена в Rails 3.1 или 3.2.