У меня есть файл данных посредника data/testimonials.yaml
:
tom:
short: Tom short
alt: Tom alt (this should be shown)
name: Thomas
jeff:
short: Jeff short
alt: Jeff alt (this should be shown)
name: Jeffrey
joel:
short: Joel short (he doesn't have alt)
name: Joel
Он может иметь либо «короткий» текст по умолчанию, либо альтернативный текст. Для некоторых отзывов я хочу использовать альтернативный текст для одних страниц и «короткий» текст для других.
В моем test.haml
я пытаюсь написать оператор HAML, который проверяет, существует ли альтернативный текст. Если это так, его следует вставить; если это не так, вместо этого следует использовать стандартный текст.
Следующий пример показывает, что data.testimonials[person].alt
правильно относится к информации из данных, поскольку ее можно вставить вручную. Однако, когда я использую ту же переменную в операторе if defined?
, она никогда не возвращает true.
Not-working 'if' way, because 'if defined?' never evaluates to true:
- ['tom','jeff','joel'].each do |person|
%blockquote
- if defined? data.testimonials[person].alt
= data.testimonials[person].alt
- else
= data.testimonials[person].short
Manual way (code above should return exactly this):
- ['tom','jeff'].each do |person|
%blockquote
= data.testimonials[person].alt
- ['joel'].each do |person|
%blockquote
= data.testimonials[person].short
Результат таков:
Что я делаю не так? Есть ли способ использовать условный оператор, который проверяет, существуют ли данные?