Rails 6 根据 DB 值为条件 meta_tag 创建 IF 语句

Rails 6 Creating IF statement for conditional meta_tag based on DB value

我查看了多个页面,但我的大脑无法解决这个问题应该如何回答的问题。

问题:我需要非常具体的数据库生成的显示页面才能具有 <meta name="robots" content="noindex">。我知道这将需要某处的 IF 语句。所以它归结为我需要我的人员索引中的特定数据库驱动页面不被搜索引擎索引,因为它们的页面实际上不应该存在。 (如果 @person.position == "hide" 它们不需要存在于搜索引擎中)

设置:我的应用程序设置了一个 layout/application 页面,其中包含所有 html、页眉、页脚、元数据,以及对显示在每个页面的所有数据的 yield 调用浏览器。

我不确定 if 语句的去向。我需要添加对控制器的调用吗?我越看越觉得这是一个超级草率的方法。

如果您使用 ERB 来呈现您的 HTML,您可以直接在 HTML 文件上执行 if 语句。

<% if @person.position == "hide" %>
  <meta name="robots" content="noindex">
<% end %>

您可以使用 the captures helper 在您的布局中创建可由视图填充的动态块。

<html>
  <head> 
    # ...
    <%= yield :meta %>
  </head>

  # ...
# app/views/people/show.html.erb
<%= content_for :meta do %>
  <meta name="robots" content="noindex">
<% end if @person.hide_from_robots? %>
....
class Person
  # Encapsulate the logic in the model
  def hide_from_robots?
    position == "hide"
  end
end

另一种方法是发送 X-Robots-Tag header 而不是使用元标记:

class PeopleController < ApplicationController
  def show
    @person = Person.find(params[:id])
    noindex_nofollow if @person.hide_from_robots?
  end

  private

  def noindex_nofollow
    response.headers['X-Robots-Tag'] = 'noindex, nofollow' 
  end
end