将Facebook元数据添加到包含子页面的Rails页面

时间:2012-10-09 11:57:32

标签: ruby-on-rails facebook metadata

我在Rails页面上添加元数据时尝试过Facebook的Open Graph协议。我现在要做的是让我的代码不重复或干掉---而不是为我拥有的每个控制器页面放置一个元数据头,我想创建一个名为“MyMetaBuilder”的基类,它将被继承通过子页面,但不知道在哪里以及如何开始编码... 有人建议必须根据上下文动态生成元数据属性值。例如,PlayMetaBuilder,CookMetaBuilder等......

此外,在单元测试控制器动作时,如何验证其存在?

非常感谢。

2 个答案:

答案 0 :(得分:0)

有一件事是定义标签,另一件是渲染它们。我会做以下事情:

  • 编写一个控制器mixin(类似acts_as_metatagable),我将为每个控制器定义特定字段(并使用默认值填充其余字段)。这些将被分配给类(或实例)变量,并以这种方式在呈现步骤中可访问。

  • 编写一个帮助函数,它将获取所有标签并将其转换为html。然后,将在布局中调用此辅助函数,并将其呈现在文档的头部。

所以,看起来有点像这样:     #homepage_controller.rb     class HomepageController<的ActionController :: Base的       #option 1.2:直接在下面的行中包含它       #include ActsAsMetatagable       acts_as_metatagable:title => "标题",:url => homepage_url     端

# lib/acts_as_metatagable.rb
module ActsAsMetatagable
  module MetatagableMethods
    #option 2.2: insert og_tags method here and declare it as helper method
    def og_metatags
      @og_tags.map do |k, v|
        # render meta tags here according to its spec
      end
    end
    def self.included(base)
       base.helper_method :og_tags
    end
  end

  def acts_as_metagabable(*args)
    include MetatagableMethods
    # insert dirty work here
  end
end

# option 1.1: include it in an initializer
# initializers/acts_as_metatagable.rb
ActiveController::Base.send :include, ActsAsMetatagable


# option 2.1: insert og_metatags helper method in an helper
module ApplicationHelper
  def og_metatags
    @og_tags.map do |k, v|
      # render meta tags here according to its spec
    end
  end
end

答案 1 :(得分:0)

我为Scoutzie所做的是将所有元数据放入头部,使用if / else案例:

%meta{:type => 'Author', :content => "Kirill Zubovsky"}
%meta{'property' => "og:site_name", :content=>"Scoutzie"}
-if @designer
 ...
-elsif @design
 ...
-else
 ...

这样,根据加载的变量,我知道它是哪个页面,从而知道要包含哪些元数据。这可能不是一个优雅的解决方案,但它很有效,而且非常简单。