我目前正在进行网站扫描,并且正在尝试改进已投入生产的应用的元演示文稿。具体来说,标签似乎存在于_head.html.slim文件中。
方式元标记的示例当前在app中表示:
- if content_for?(:description)
meta name="description" content=content_for(:description)
我想用以下内容替换它:
<meta property="og:description" content="DESCRIPTION OF SITE HERE"/>
我是否在正确的轨道上?我犹豫是否要完全擦除&#34; if content_for?(:description)位。
之前我没有使用过薄轨,而且我被抛弃了。我已经浏览了一些关于slim gem的文档,但它以与我目前在_head.html.slim文件中看到的完全不同的方式定义了元标记的实现。
非常感谢任何建议。
答案 0 :(得分:1)
content_for
是actually part of Rails,与Slim几乎没有关系。 yield
and content_for
允许您在布局中分配“块”内容,这些内容可以通过视图动态填充。
这是动态分配页面标题的简单ERB示例:
# app/views/layouts/application.html.erb
<title>MyApp | <%= content_for?(:title) ? yield(:title) : "Foo" %>
然后,在您的观看中,您可以提供包含以下内容的内容:
# app/views/products.html.erb
<%- contents_for(:title, "Products" ) -%>
最终结果是,当您访问MyApp | Products
时,网页标题会显示为/products
。
对于您的示例,您只需在视图中提供说明内容即可。
# app/views/user/show.slim
- content_for(:description, "#{ @user.name } on MyApp")
# or we use provide to tell the layout to stop looking for more contents.
- provide(:description, "#{ @user.name } on MyApp")
并将其设置为在没有提供内容的情况下显示默认值。
= meta name="description" content= content_for?(:description) ? yield(:description) : "The awesomest app on the interwebs."
要清理它,您可能需要使用辅助方法。
module ApplicationHelper
# ...
def og_description(default)
# note that we use content_for and not yield since we want
# the value - not to yield (print) to the buffer.
disc = content_for?(:description) ? content_for(:description) : default
tag(:meta, {
property: "og:description",
content: disc
})
end
end
这将允许你这样做:
= og_description("The awesomest app on the interwebs.")