Perl - Mojolicious - Печать неопределенного ключа в шаблоне - PullRequest
0 голосов
/ 27 сентября 2018

Чтобы получить некоторый контекст, мой контроллер выбирает из запроса массив ref.Затем результаты печатаются в шаблоне следующим образом.

home.html.ep

 <td> <%= @$query_result[0]->{data} %> </td>    
 <td> <%= @$query_result[1]->{data} %> </td>  
 ....  
 <td> <%= @$query_result[27]->{data} %> </td>    

Из-за того, что некоторые результаты не существуют, Mojolicious выдает ошибку (не может использовать значение хеша undef)...)
Что я пытаюсь сделать:
Когда Mojolicious добирается до ключа / значения хэша undef, чтобы напечатать 'No Data'.
Я пытался так:

  <td> <%= @$query_result[27]->{data} || 'no data' %> </td>   
  or    
  <td> % (exists(@$query_result[27]->{data})) ? <%= @$query_result[27]->{data} %> : 'no data' </td>   
  or 
  <td>
  % if (exists($query_result[27]->{data})) {
  <%= $query_result[27]->{data} %>
  % } else { 
  'No data'
  % }

Я не могу просто удалить <% = $ query_result [27] -> {data}%>, потому что он возвращен из запроса, который выполняется с другими параметрами, и только некоторые параметры не возвращают 27-й массив.

Есть ли способ достичь того, что я пытаюсь?Спасибо!

1 Ответ

0 голосов
/ 27 сентября 2018

Похоже, вы пытаетесь показать все индексы от 0 до 27 или меньше.Вы, вероятно, хотите использовать цикл для этого.

% foreach my $i ( 0 .. scalar @$query_result ) {
<td> <%= @$query_result[$i]->{data} %> </td>    
% }

Теперь вам больше не нужно заботиться о количестве столбцов.Сделайте то же самое для заголовков, и вы получите золото.


В качестве альтернативы, вам нужно проверить, есть ли что-то в $query_result->[27], прежде чем вы сможете выполнить проверку exists, потому что undef(т. е. без значения ) нельзя использовать как ссылку на хэш.

<td><%= $query_result->[27] ? @$query_result[27]->{data} : 'no data' </td>   
...