I want to render for facebook bot special data. I have og.html.erb
<!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>
And this in my page controller:
# 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
How i can to DRY it? Am i need use helper or before_filter? If i will user before_filter, how i can set @og hash from my controller?
I think you can define a method in ApplicationController like this,
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
then your page controller becomes this,
# 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