2014-09-23 2 views
0

Оказание частичного шаблона Ruby Slim, у меня есть небольшой вспомогательный метод, встроенный в блок двигателя. Разбитое вниз пример:Ruby Slim: доступ к локальному назначению в блоке ядра Ruby

ruby: 
    def new_record_form? 
    object.new_record? 
    end 

Здесь object локально назначенный переменная, которая может быть использована в обычном коде Тонкий, но не доступен в контексте блока двигателя. Кроме того, local_assigns также не доступен. Как получить доступ к переменным, переданным частичным в таком блоке?

ответ

2

Это обычное поведение 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 

Обратите внимание, что общий совет должен держать фактический код в шаблонах к минимуму. Возможно, вы захотите перенести этот метод в хелпер - переменные экземпляра будут доступны оттуда.

+0

Сфера охвата была ясна для меня, но я не был уверен, как области были организованы в контексте обработки Slim, чтобы исправить проблему. Не вдаваясь в подробности того, почему помощник не имеет (imho), имеет смысл в этом конкретном случае, решение переменной экземпляра кажется хорошим подходом. Благодаря! –

Смежные вопросы