2013-08-19 66 views
0

我有這樣的代碼:如何獲得一個職位的類別類液體的Octopress插件::標籤

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一些方法,如sizeeach我得到這個錯誤:

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任何方法。 有人可以告訴我我在做什麼錯嗎?

回答

2

幸運的是,修復很簡單。問題是你的代碼假設每個頁面都有一個類別數組。 atom.xml的情況並非如此,因此context.environments.first["page"]["categories"]將返回nil,當然,它沒有方法「大小」。如果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) 

這應該做到這一點。

相關問題