3

アプリケーションを Facebook と統合するために、Omniauth と Koala7 の gem を実装しました。カスタム オブジェクトを使用してカスタム アクションを投稿する際の小さな問題を除いて、すべてが正常に機能します。

問題は、私のオブジェクト URL が /posts/1 などの新しく作成された投稿の表示ページである必要があることです。このページを facebook オブジェクトとして認識させるには、次のようにshow.html.erbの上に facebook メタタグを配置する必要があります。

<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>

問題は、facebookオブジェクト デバッガーtype:webpageがこれをではなくとして認識することですtype:post。これは、次のように/layouts/application.html.erbにデフォルトの head タグが既にあるためだと思います。

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

オブジェクトデバッガーが具体的に指摘しているため、これを想定しています。

本文のメタ タグ: の外側にタグがあります。これは、形式が正しくなくて解析ツリーの下位に落ちたか、Open Graph タグを誤って間違った場所に配置したことが原因です。いずれにせよ、タグが使用可能になる前に修正する必要があります。

では、どうすればこの問題を解決できますか? Facebook メタタグを my に配置する必要show.html.erbがありますが、ページ自体は既にアプリケーション レイアウト全体の本体の一部になっています。

4

1 に答える 1

20

投稿されたエラー メッセージに基づいて、メタ タグが本来ある<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 をチェックして、yield がオプションと見なされるようにします。

<head>
  <title>sdff</title>
  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
  <%= content_for?(:head) ? yield(:head) : '' %>
</head>
于 2013-02-18T05:01:56.640 に答える