我有这段代码:
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
它输出数组,没关系。但是,当我在categories
上尝试某些方法时,例如size
或。{
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
上应用任何方法。
有谁能告诉我这里做错了什么?
答案 0 :(得分: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)
应该这样做。