저는 Liquid에 익숙하지 않지만 Ruby에는 익숙하지 않습니다. Liquid이 안전상의 이유 때문에 루비 일 필요는 없다는 것을 알고 있습니다. 그러나, 지킬 블로그에, 나는 플러그인으로 다음과 같은 코드를 정의하려고 :Liquid 태그를 정의하고 문자열을 반환하지만 문자열을 반환하는 처리는하지 않습니까?
module Jekyll
class Person_Index < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
for person in context.registers[:site].data["people"]
if (person.index.to_s() == @text.to_s())
return person.display
end
end
# We reach here, something's wrong anyway
return "((INDEX NOT FOUND #{@text}))"
end
end
end
Liquid::Template.register_tag('Person_Index', Jekyll::Person_Index)
이를, 당연히, 문서 생성시 실패합니다. {% Person_Index 2 %}
로 호출하면 날이 오류를 제공합니다
Liquid Exception: wrong number of arguments (0 for 1) in _posts/2014-07-22-an-entry.md/#excerpt
확실 "어쩌면 그것은 어떻게 든 버그 발췌 세대 잡힌"사람의 생각입니다. 그 해결 방법은 두 번째 단락을 테스트 사례로 간단히 다시 작성하여 해결했습니다. 여전히 #excerpt에는없는 동일한 오류가 발생합니다.
직접 변화는 하나의 라이너는 주저없이 실행하게됩니다 만들기 위해 렌더링 및 출력 "잘가"(내가 따옴표가 원하는 동작이 아니기 때문에 말)하기 :
def render(context)
return "HOW ARE YOU BECAUSE I AM A POTATO"
end
태그가 호출되면 Portal 2에서 해제 된 행을 출력합니다. (예, 루비에서는 각각 return
이 필요하지 않습니다.)
첫 번째 오류가 발생하고 두 번째 오류가 발생한 이유는 무엇입니까? 첫 번째 것이하고 싶어하는 것을 할 수있는 방법이 있습니까?
- index: 1 nick: Guy display: That Guy name: first: That middle: One last: Guy account: github: greysondn - index: 2 nick: Galt display: Johnny name: first: John middle: last: Galt account: github:
가 사전에 감사합니다
_data/people.yml
는 유사 정의된다.
'person.index.to_s을 선호()','index'이 * 속성으로 액세스되는 경우 내 생각 * ..? (귀하의 솔루션은 * 매개 변수 *, 의미의 사소한 차이점을 말하지만 내가 틀렸다면 미래의 독자는 혼란 스러울 수 있습니다.) 그 외의 해결책은 올바른 해결책입니다. 비교를 위해 (to_i()를 사용하여) 정수로 캐스팅하라는 조언을 받았는데, 지금은 매력처럼 작동합니다. 도와 줘서 고마워, 데이빗! –
부록 :'person'은'hash'이므로, 값을 되 찾을 열쇠를 주어야합니다. 나는 그것을 임의의 물건처럼 취급하려고 노력했다. Ruby에 이러한 액세스에 대한 명명법이 있는지 확실하지 않습니다. 이것이'person.display'에서'person [ 'display']'로 바뀌는 이유입니다. 우리는 값으로 접근하려고 시도하지 않고 그것을 키로 주어야합니다. 스트리핑에 대한 조언은 건전합니다. 나는 그것을 테스트했지만 스트립 다운을 시도하지 않았다. (정수로 변환 된 것처럼) ... 나는 미래의 사람들에게 유용 할 수있는 다른 노트를 생각할 수 없다 ... –