Почему это возвращает ошибку «неопределенный метод»

Я начинаю работать с Treetop (хотя я не думаю, что это ошибка верхушки дерева) и пытаюсь разобрать простое поле даты.

Я пытаюсь выяснить, включает ли дата месяц, и если да, то вернуть его. Итак, я передаю свое проанализированное дерево на мой взгляд и говорю


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

      < %= @input_date.month.text_value % >

<% end %>

в моем @input_date месяц не существует, поэтому я ожидал, что не будет вывода, но вместо этого я получаю сообщение об ошибке

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

Я также пытался использовать .exists, но получаю тот же результат.

Почему это?? Есть ли другой способ проверить наличие месяца??


person pedalpete    schedule 01.08.2011    source источник


Ответы (2)


Если вы хотите проверить существование метода, вы можете использовать object.respond_to?(:method_name). Похоже, что в вашем примере не существует метода «месяц».

Вы также можете использовать метод «попробовать», если вы хотите проверить, является ли объект нулевым, а затем вызвать метод.

‹%= object.try(:method, :param) %> вместо ‹% if !object.nil? %>.....

Я получил его из здесь

person Ryan Her    schedule 01.08.2011
comment
я использовал .respond_to, «попытка» не работала в операторе if, который мне нужен, чтобы окончательно вывести {month:‹= @input_date.month.text_value % ›} - person pedalpete; 01.08.2011

Не передавайте результаты синтаксического анализа вне контекста синтаксического анализатора. SyntaxNode предназначен только для использования внутри синтаксического анализатора. Когда у вас есть успешный синтаксический анализ, вызовите функцию, которую вы определили в своем дереве, чтобы вернуть объект домена - не используйте просто дерево синтаксического анализа, оно не для этого.

person cliffordheath    schedule 06.05.2015