Это обычное поведение Ruby, метод не может получить доступ к локальным переменным за пределами своей области таким образом - на самом деле довольно необычно иметь такой метод.
Вы можете увидеть такую вещь, при определении класса и т.д .:
class Foo
object = 7
# use object in some way in defining the class...
def bar
# object not available here
puts object
end
end
Здесь метод bar
не имеет возможности доступа к object
.
рубин также позволяет синтаксис, как этот, который находится ближе к тому, что происходит в вашем случае, когда ваш Слим код компилируется:
def foo
object = 7
def bar
puts object
end
end
Но обратите внимание, что это не вложенным метод как таковой , вызывая foo
, результаты определяют bar
на том же объекте, но переменная object
не доступна в bar
, а при вызове bar
будет получена ошибка.
Для доступа к переменным из внутренних методов, подобных этому, они должны быть переменными экземпляра. В вашем примере это будет выглядеть примерно так:
- @object = ...
ruby:
def new_record_form?
@object.new_record?
end
Обратите внимание, что общий совет должен держать фактический код в шаблонах к минимуму. Возможно, вы захотите перенести этот метод в хелпер - переменные экземпляра будут доступны оттуда.
Сфера охвата была ясна для меня, но я не был уверен, как области были организованы в контексте обработки Slim, чтобы исправить проблему. Не вдаваясь в подробности того, почему помощник не имеет (imho), имеет смысл в этом конкретном случае, решение переменной экземпляра кажется хорошим подходом. Благодаря! –