2011-08-01 20 views
1

私はTreetopを使い始めていますが(これはツリートップエラーではないと思いますが)、単純な日付フィールドを解析しようとしています。これはなぜ「未定義のメソッド」エラーを返すのですか

私は、日付に月が含まれているかどうかを確かめようとしています。だから私は、私の見解に私の解析された木を渡し、私の@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)%>の代わりに<%if!object.nil? %> .....

私はパーサのコンテキスト外の結果を解析渡さないでくださいhere

+0

私は最終的に{"月": "<= @ input_date.month.text_value%>}を出力するために必要なifステートメントで ' – pedalpete

0

からそれを得ました。 SyntaxNodeは、パーサー内でのみ使用できます。解析が成功したら、ツリーに定義した関数を呼び出してドメインオブジェクトを返します。構文解析ツリーを使用するだけではなく、それが目的ではありません。

関連する問題