Ответ 1
defined?
является эквивалентом ruby для isset()
.
<% defined?(a) ? a : 'some default' %>
Возможный дубликат:
Проверка, определена ли переменная в 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 : '' %>
, но это, очевидно, неправильно. Любая помощь будет оценена
defined?
является эквивалентом ruby для isset()
.
<% defined?(a) ? a : 'some default' %>
Если вы хотите ничего не показывать, если 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}" %>