带有细长导轨的元标签

时间:2016-09-22 05:52:35

标签: ruby-on-rails ruby-on-rails-4 metadata meta-tags slim-lang

我目前正在进行网站扫描,并且正在尝试改进已投入生产的应用的元演示文稿。具体来说,标签似乎存在于_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文件中看到的完全不同的方式定义了元标记的实现。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

content_foractually 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.")