0

我有这个代码:

module Jekyll
  class ConnexeTag < Liquid::Tag
    def render(context)
      categories = get_categories(context)
      categories.class.name # => "Array"
      # categories # => "category1category2"
      # categories.join(',') # => Error !
      # categories.size # => Error !
    end

    private

    def get_categories(context)
      context.environments.first["page"]["categories"]
    end
  end
end

它输出数组,没关系。但是当我在 , 上尝试一些方法时categoriessize或者 each我得到这个错误:

Building site: source -> public
Liquid Exception: undefined method `size' for nil:NilClass in atom.xml
/home/xavier/octopress/plugins/connexe_tag.rb:25:in `render'

我不能在categories. 有人可以告诉我我在这里做错了什么吗?

4

1 回答 1

2

令人高兴的是,修复很简单。问题是您的代码假定每个页面都有一个类别数组。atom.xml 不是这种情况,因此context.environments.first["page"]["categories"]将返回nil当然没有方法“size”的情况。如果 get_categories 返回一个值并且一切就绪,您可以将其设置为仅输出。

module Jekyll
  class ConnexeTag < Liquid::Tag
    def render(context)
      categories = get_categories(context)

      # return a list of categories for pages which have them
      categories.join(', ') if categories
    end

    private

    def get_categories(context)
      context.environments.first["page"]["categories"]
    end
  end
end


Liquid::Template.register_tag('connexe_tag', Jekyll::ConnexeTag)

那应该这样做。

于 2013-08-22T03:22:29.923 回答