7

По какой-то причине искатель facebook запускает json-ответ в моих действиях с рельсами. Это приводит к тому, что действие просто возвращает json-представление объекта без обычных меток html markup + open graph. Я проверил это с помощью рельсов 3.2.6. Я использую отлаживатель откройте графический отладчик facebook, чтобы посмотреть, что видит скребок: http://developers.facebook.com/tools/debug.facebook open graph crawler triggering json response in rails действия

Код очень прост. Представьте себе простое действие «показать» для объекта, например пользователя. Она заканчивается:

respond_to do |format| 
    format.js { render :json => @this.to_json } 
    format.html 
end 

facebook искатель вызывая format.js, что вызывает открытые теги график, чтобы не быть оказаны. Любые идеи, почему это может произойти или как это исправить? Благодарю.

ответ

15

ИТАК Facebook посылает принимает заголовок

*/* 

Поскольку никакого конкретного формата не требуется, рельсы просто идет вниз блок respond_to в порядке. Если вы перечислите ваши JS первыми в блоке respond_to как ниже рельсы будут реагировать на facebook открытой гусеничный с JSON, который не будет работать:

respond_to do |format| 
    format.js { render :json => @this.to_json } 
    format.html 
end 

Просто включите заказ так по умолчанию рельсов отвечает HTML:

respond_to do |format| 
    format.html 
    format.js { render :json => @this.to_json } 
end 

Я не уверен, почему Facebook не определяет формат, который они ищут ... кажется довольно идиотским для меня. Надеюсь, это поможет кому-то по дороге.

+0

Есть также «настоящие» пользовательские агенты, которые говорят, что они будут принимать */* - например (IIRC), старый IE сделает это на перезагрузке страницы. Поэтому, возможно, лучше всего настроить приложение таким образом, чтобы он служил HTML как приоритет №1. – CBroe

+0

Это не работает, я пробовал различные заказы для format.html, format.js и format.json. Похоже, Rails интерпретирует 'HTTP_ACCEPT' */* как format.json. Как я могу это исправить? Я разместил здесь свой вопрос: http://stackoverflow.com/questions/12094683/facebook-open-graph-action-rails-return-json-or-html – Dean

2

Проверьте, какие заголовки HTTP-запросов отправляются сканером Facebook - особенно Принять заголовок.

Может быть, они отправляют значение, которое позволяет вашему приложению считать, что он должен отправить что-то другое, чем обычный вывод HTML.

+0

Похоже, что принимает «*/*». Голосуйте за то, что указали мне в правильном направлении! Ответ ниже. – Marc