Ruby on rails 将Facebook元数据添加到带有子页面的Rails页面

Ruby on rails 将Facebook元数据添加到带有子页面的Rails页面,ruby-on-rails,facebook,metadata,Ruby On Rails,Facebook,Metadata,我尝试过Facebook的开放图协议在Rails页面上添加元数据。我现在想做的是使我的代码不被复制或D.R.Y.---我不想为我拥有的每个控制器页面放置一个元数据头,我想创建一个名为“MyMetaBuilder”的基类,它将被子页面继承,但不知道从何处开始编码,也不知道如何开始编码。。。 有人建议元数据属性值必须根据上下文动态生成。例如,PlayMetaBuilder、CookMetaBuilder等等 另外,在单元测试控制器操作时,如何验证其存在 非常感谢。一件事是定义标记,另一件事是呈现它们

我尝试过Facebook的开放图协议在Rails页面上添加元数据。我现在想做的是使我的代码不被复制或D.R.Y.---我不想为我拥有的每个控制器页面放置一个元数据头,我想创建一个名为“MyMetaBuilder”的基类,它将被子页面继承,但不知道从何处开始编码,也不知道如何开始编码。。。 有人建议元数据属性值必须根据上下文动态生成。例如,PlayMetaBuilder、CookMetaBuilder等等

另外,在单元测试控制器操作时,如何验证其存在


非常感谢。

一件事是定义标记,另一件事是呈现它们。我会这样做:

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

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

所以,它看起来有点像这样: #主页\u controller.rb 类HomepageController“title”,:url=>主页 结束


我为Scoutzie所做的是将所有元数据放入head partial中,if/else情况如下:

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

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

谢谢@chuck。我可以知道我将把上面的例子放在哪个目录或文件中吗?。。它只存在一个文件中吗?我对这个完全是个新手。。我之前做的是将每个meta标记放在每个show.html.erb文件的
中…我通常将mixin放在lib中,并将它们直接包含在类中或初始值设定项中。辅助方法是有争议的。直接将其放置在帮助程序中,或者通过在控制器mixin中定义它并将其声明为帮助程序方法将其保留在其上下文中:。我将稍微编辑一下我的示例。
%meta{:type => 'Author', :content => "Kirill Zubovsky"}
%meta{'property' => "og:site_name", :content=>"Scoutzie"}
-if @designer
 ...
-elsif @design
 ...
-else
 ...