2013-08-19 5 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 
그것은 배열을 출력

, 그 괜찮아요. 내가 size 또는 each 같은 categories에 몇 가지 방법을 시도 할 때이 오류를 얻을 :

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"]은 물론 'size'메서드가없는 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) 

그렇게해야합니다.