2011-08-01 3 views
1

트리 톱으로 시작하고 있습니다 (그러나 이것이 트리 노트 오류라고 생각하지 않지만) 간단한 날짜 필드를 구문 분석하려고합니다.이것이 '정의되지 않은 메소드'오류를 반환하는 이유

나는 날짜에 한 달이 포함되어 있는지 알아 내려고하고있다. 그래서 난 내보기로 내 구문 분석 트리를 통과하고 내 @input_date에서

 

< % if [email protected]_date.month.nil? % > 

     < %= @input_date.month.text_value % > 

<% end %> 

이, 달이 존재하지 않는 말, 그래서 더 출력이없는 것으로 기대했지만, 대신에 나는 오류

 
undefined method 'month' for #<Treetop::SyntaxNode:0x41a0240> 
받고 있어요

.exists도 사용하려고했지만 동일한 결과가 나타납니다.

왜 이가요 ?? 그 달의 존재를 확인하는 또 다른 방법이 있습니까 ??

답변

1

메소드의 존재를 확인하려면 object.respond_to? (: method_name)를 사용할 수 있습니다. 예를 들어 '월'방법이 존재하지 않는 것 같습니다.

원하는 것이 객체가 nil인지 테스트 한 다음 메소드를 호출하는 경우에도 'try'메소드를 사용할 수 있습니다.

< % = object.try (: 메소드, : param) %> 대신! < %! object.nil? %> .....

나는 파서 컨텍스트 외부에서 결과를 구문 분석에 전달하지 않습니다 here

+0

.respond_to를 사용했는데 'try'가 마지막으로 { "month": "<= @ input_date.month.text_value %>}를 출력해야하는 if 문에서 작동하지 않았습니다. – pedalpete

0

에서 얻었다. SyntaxNode는 파서 내부에서만 사용됩니다. 구문 분석에 성공하면 트리에 정의한 함수를 호출하여 도메인 객체를 반환합니다. 구문 분석 트리를 사용하는 것이 아니라 그 목적을위한 것입니다.

관련 문제