application.html.erb中的Facebook OG Meta标签

sac*_*shu 3 ruby-on-rails-3 facebook-opengraph

在我的rails应用程序中,我想动态连接FB OG Meta Tags与用户当前所在的页面.我觉得这应该是直截了当的,但不能让它正常工作.

例如,我有"Idea"页面,其上有Idea标题和Idea Description.

目前,在我的Application.html.erb文件中,我有这个(并且我的标题是NoMethodError):

<meta property="og:title" content= <%= "#{@idea.title.titleize}" %>/>
<meta property="og:url" content= <%= "http://myurl.com/ideas/#{@idea.id}" %>/>
<meta property="og:description" content= <%= "#{@idea.short_description}" %>/>
Run Code Online (Sandbox Code Playgroud)

我的语法有问题吗?随着这些实例变量的可用性?我不确定我完全理解这是如何工作的.谢谢!

Dan*_*nny 9

是的noob提到,使内容声明在引号内.

<meta property="og:description" content= "<%= @idea.short_description %>" />
Run Code Online (Sandbox Code Playgroud)

为了在Rails中使这些元标记动态化,人们首先开始使用Ryan Bates描述的漂亮页面标题方法,在漂亮的页面标题中使用railscast

然而,我刚刚看到这个meta-tags gem看起来非常有前途:meta-tags

使用gem,管理任何元标记,使其动态和SEO友好.例:

set_meta_tags :title => 'Member Login'
# <title>Some Page Title</title>
Run Code Online (Sandbox Code Playgroud)

轻松设置所有facebook:og标签:

  set_meta_tags :og => {
                  :title    => 'The Rock',
                  :type     => 'video.movie',
                  :url      => 'http://www.imdb.com/title/tt0117500/',
                  :image    => 'http://ia.media-imdb.com/rock.jpg',
                  :video    => {
                    :director => 'http://www.imdb.com/name/nm0000881/',
                    :writer   => ['http://www.imdb.com/name/nm0918711/', 'http://www.imdb.com/name/nm0177018/']
                  }
                }
Run Code Online (Sandbox Code Playgroud)

然后,当您调用时,上面的代码输出以下html <%=display_meta_tags%>:

<meta property="og:title" content="The Rock"/> <meta property="og:type" content="video.movie"/> <meta property="og:url" content="http://www.imdb.com/title/tt0117500/"/> <meta property="og:image" content="http://ia.media-imdb.com/rock.jpg"/> <meta property="og:video:director" content="http://www.imdb.com/name/nm0000881/"/> <meta property="og:video:writer" content="http://www.imdb.com/name/nm0918711/"/> <meta property="og:video:writer" content="http://www.imdb.com/name/nm0177018/"/>

源代码和github repo中有更多示例.最后一个标记集优先,所以如果你在布局中设置一个,然后在你的页面中设置另一个,看起来像页面中的那个将优先.

如果你使用它,只需确保你<%= display_meta_tags %>的布局页面即application.html.erb.