2012-03-18 50 views
0

我想呈現Facebook專用數據。我在我的頁面控制器og.html.erbrails before_filter,facebook用戶代理和動態OpenGraph數據

<!DOCTYPE html><html><head> 
<meta property="og:title" content="<%= @og[:title] %>"> 
<meta property="og:type" content="website"> 
<meta property="og:url" content="<%= @og[:url] %>"> 
<meta property="og:description" content="<%= @og[:description] %>"> 
<meta property="fb:admins" content="100000235955045"> 
</head><body></body></html> 

這:

# encoding: UTF-8 
class PageController < ApplicationController 
    def index 
    @og = { :title => 'index title', :description => 'index desc', :url => 'http://someurl.com/index' } 
    if request.headers['HTTP_USER_AGENT'].eql? 'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)' 
     render '/og', :layout => false 
    end 
    end 

    def cv 
    @og = { :title => 'cv title', :description => 'cv description', :url => 'http://someurl.com/cv/' } 
    if request.headers['HTTP_USER_AGENT'].eql? 'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)' 
     render '/og', :layout => false 
    end 
    end 
end 

我怎樣才能把它擦乾?我需要使用助手還是before_filter? 如果我將用戶before_filter,我怎麼可以從我的控制器設置@og哈希?

回答

2

我認爲你可以在ApplicationController中這樣定義一個方法,

def render_og 
    if request.headers['HTTP_USER_AGENT'].eql? 'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)' 
    render '/og', :layout => false 
    end 
end 

那麼你的頁面控制器將成爲該,

# encoding: UTF-8 
class PageController < ApplicationController 
    def index 
    @og = { :title => 'index title', :description => 'index desc', :url => 'http://someurl.com/index' } 
    render_og 
    end 

    def cv 
    @og = { :title => 'cv title', :description => 'cv description', :url => 'http://someurl.com/cv/' } 
    render_og 
    end 
end 
+1

這是馬麗娟,但我可以設置OG爲render_og方法的參數? – 2012-03-18 15:00:11

+0

問題解決了!再次感謝你 – 2012-03-18 15:14:42