0

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

另外,当对控制器动作进行单元测试时,我如何验证它的存在?

非常感谢。

4

2 回答 2

0

我为 Scoutzie 所做的,是将所有元数据放入一个头部部分,if/else 情况如下:

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

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

于 2013-03-19T00:11:33.477 回答
0

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

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

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

所以,它看起来有点像这样: # homepage_controller.rb class HomepageController < ActionController::Base # option 1.2: 在下面直接包含它 # include ActsAsMetatagable act_as_metatagable :title => "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
于 2012-10-09T12:12:23.253 回答