2013-02-18 5 views
3

Omniauth와 Koala7 보석을 구현하여 내 응용 프로그램을 Facebook에 통합했습니다. 사용자 정의 개체를 사용하여 사용자 지정 작업을 게시 할 때 발생하는 사소한 문제를 제외하면 모든 것이 잘 작동합니다.페이스 북 메타 태그를 레일스 애플리케이션에 배치하기

문제는 내 개체 URL이/posts/1과 같이 새로 만든 게시물의 표시 페이지 여야한다는 것입니다. 페이스 북의 객체로 인식이 페이지를 만들려면,이 같은 show.html.erb의 상단에 페이스 북의 메타 태그를 넣어해야합니다

<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# sdff: http://ogp.me/ns/fb/sdff#"> 
    <meta property="fb:app_id" content="myid" /> 
    <meta property="og:type" content="sdff:post" /> 
    <meta property="og:url" content="<%= "http://sdff.herokuapp.com" + post_path(@post) %>" /> 
    <meta property="og:title" content="Sample" /> 
    <meta property="og:image" content="https://fbstatic-a.akamaihd.net/images/devsite/attachment_blank.png" /> 
</head> 

문제는 페이스 북 object debuggertype:webpage 대신으로 이것을 인식입니다 type:post.

메타 : 오브젝트 디버거 구체적으로 지적 때문에이 가정

<head> 
    <title>sdff</title> 
    <%= stylesheet_link_tag "application", :media => "all" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
</head> 

: 내가 거기, 이미 /layouts/application.html.erb의 기본 헤드 태그입니다과 같이 때문이라고 생각 태그 본문 : 당신은 귀하의 태그가 있습니다. 이것은 당신의 조작이 잘못되어 구문 분석 트리에서 더 낮아 졌거나 실수로 Open Graph 태그를 잘못된 위치에 두었 기 때문입니다. 어느 쪽이든 태그를 사용할 수있게되기 전에 수정해야합니다.

어떻게이 문제를 해결할 수 있습니까? show.html.erb에 페이스 북 메타 태그를 넣어야하지만, 페이지 자체는 이미 전체 애플리케이션 레이아웃 본문의 일부입니다.

답변

19

게시 한 오류 메시지를 기반으로 메타 태그가 <head>에 없으므로 수집합니다. content_for 블록을 사용하는 것이 좋습니다. show.html.erb보기에서 원하는 메타 태그를 content_for :head 블록에 넣습니다. 이렇게하면 html이 저장되어 레이아웃의 다른 위치에 삽입 할 수 있습니다.

<% content_for :head do %> 
    <meta property="fb:app_id" content="myid" /> 
    <meta property="og:type" content="sdff:post" /> 
    <meta property="og:url" content="<%= "http://sdff.herokuapp.com" + post_path(@post) %>" /> 
    <meta property="og:title" content="Sample" /> 
    <meta property="og:image" content="https://fbstatic-a.akamaihd.net/images/devsite/attachment_blank.png" /> 
<% end %> 

그런 다음 yeild(:head)을 애플리케이션 템플릿에 추가하십시오. 쇼보기에 배치 한 html이 애플리케이션 템플리트의이 지점에 삽입됩니다. 수확량이 선택 사항으로 간주되도록 여기에서 nil을 확인합니다.

<head> 
    <title>sdff</title> 
    <%= stylesheet_link_tag "application", :media => "all" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
    <%= content_for?(:head) ? yield(:head) : '' %> 
</head> 
+0

도움 주셔서 감사합니다. Greg. 'content_for'를 사용할 수 있다는 것을 잊어 버렸습니다 :) –

+0

'content_for'를 사용하면 어디에서 프리픽스를 넣을 수 있습니까? –

+0

응용 프로그램의 각 페이지마다 접두사를 다르게해야합니까? 이것에 접근 할 수있는 한 가지 방법은 인스턴스 변수 또는 도우미 메서드를 사용하는 것입니다. '>'와 같은 것은 이전에 변수를 설정했다고 가정 할 때 작동 할 수도 있습니다. –

관련 문제