我在Rails页面上添加元数据时尝试过Facebook的Open Graph协议。我现在要做的是让我的代码不重复或干掉---而不是为我拥有的每个控制器页面放置一个元数据头,我想创建一个名为“MyMetaBuilder”的基类,它将被继承通过子页面,但不知道在哪里以及如何开始编码... 有人建议必须根据上下文动态生成元数据属性值。例如,PlayMetaBuilder,CookMetaBuilder等......
此外,在单元测试控制器动作时,如何验证其存在?
非常感谢。
答案 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
...
这样,根据加载的变量,我知道它是哪个页面,从而知道要包含哪些元数据。这可能不是一个优雅的解决方案,但它很有效,而且非常简单。