为什么返回“未定义方法”错误

时间:2011-08-01 18:49:56

标签: ruby-on-rails null treetop

我开始使用Treetop(虽然我认为这不是树梢错误)并且我正在尝试解析一个简单的日期字段。

我想知道日期是否包含一个月,如果是,则返回该日期。所以我将解析后的树传递给我,并说


< % if !@input_date.month.nil? % >

      < %= @input_date.month.text_value % >

<% end %>

在我的@input_date中,月份不存在,所以我期待没有输出,但是我得到了一个错误

undefined method 'month' for #<Treetop::SyntaxNode:0x41a0240>

我也试过使用.exists,但我得到了相同的结果。

这是为什么?有没有另一种方法来检查月份的存在?

2 个答案:

答案 0 :(得分:1)

如果要检查方法是否存在,可以使用object.respond_to?(:method_name)。看起来你的例子中不存在“月”方法。

如果您想要测试对象是否为nil,则可以使用'try'方法,然后调用方法。

&lt;%= object.try(:method,:param)%&gt;而不是&lt;%if!object.nil? %GT; .....

我是从here

得到的

答案 1 :(得分:0)

不要在解析器上下文之外传递解析结果。 SyntaxNode仅用于解析器内部。当你有一个成功的解析时,调用你在树上定义的函数来返回一个域对象 - 不要只使用解析树,这不是它的用途。