1

由于我已将 Jekyl 更新到0.12.0我的网站,因此不再编译。我到处都有这样的代码,遍历帖子并过滤失败的类别

<ul>
  {% for post in site.posts reversed  %}
  {% if post.category[0] == "about" %}
    <li>
      <a href="{{base_path}}{{post.url}}">{{ post.title }}</a>
    </li>
  {% endif %}
  {% endfor %}
</ul>

这是我收到的错误消息:

Liquid Exception: undefined method `gsub' for ["about"]:Array in 2012-09-20-about.md

如果我删除Jekyll 0.12.0,那么一切都会再次运行。

有什么事情发生了剧烈的变化吗?

4

2 回答 2

1

我认为您必须有一些没有定义任何类别的帖子?

我相信 Jekyll 0.12.0 提高了错误捕获的标准。因此,如果帖子没有类别,Ruby 命令post.category[0] == about不会 throw FALSE,而是会抛出NA(或类似的东西)。以前,Jekyll 会忽略这一点(大概将其视为FALSE),这并不是最好的行为。

我的猜测是您应该将命令重写为更明确,即如果 category[0] 不为空且值为“about”。考虑在命令之前简单地添加额外的if语句:

{% if defined?(post.category[0]) %}

首先检查您是否没有进行无效比较。

于 2013-01-10T18:47:38.833 回答
0

嗯,我无法在这里重现错误。如果您将其更改为

{% if post.category contains "about" %}

它有效吗?

于 2013-01-07T04:32:08.613 回答