Эхо, если переменная определена в ruby ​​/erb - программирование
Подтвердить что ты не робот

Эхо, если переменная определена в ruby ​​/erb

Возможный дубликат:
Проверка, определена ли переменная в Ruby

используя метод Tilt template render, я передаю

#... t setup ...
t.render(self, { :a => 'test', :b => 'again' })

в моем template.erb

<%= a %>
<%= b %>

Скажем, я удаляю :b из хэша, который я передаю в шаблон. Отказ не будет выполнен, потому что :b - undefined.

в PHP, я мог бы пойти:

<?= isset($foo) ? $foo : '' ?>

есть ли какой-либо чистый способ (в ruby ​​/erb) для "эха, если"?

Я пробовал <%= b.nil? ? b : '' %>, но это, очевидно, неправильно. Любая помощь будет оценена

4b9b3361

Ответ 1

defined? является эквивалентом ruby ​​для isset().

<% defined?(a) ? a : 'some default' %>

Ответ 2

Если вы хотите ничего не показывать, если a не определен:

<%= a if defined?(a) %>

Также вы можете установить по умолчанию значение a в начале частичного, если оно не определено. Таким образом, вы уверены, что a не будет терпеть крах на вас, и вам не нужно проверять, определено ли это везде. Я предпочитаю этот путь лично.

ВНИМАНИЕ: если вы установите для параметра a на false при его передаче в шаблон, он будет переназначен на "" в моем примере.

<% a ||= "" %>
#Then do some things with it. No crash!
<%= a %>
<%= a*10 %>
<%= "Here the variable a value: #{a}" %>