@ruby90

Почему в erb темплейте игнорируется участок кода?

Код:
<td><% if @statistics[service].has_key?(:errorsrate)
          errorsrate = @statistics[service][:errorsrate].to_i
        else
          errorsrate = "-"  %><%=
            if errorsrate.is_a?(String)
              if errorsrate > 5
                'class="red"' 
              else 
                'class="green"'
              end  
            end %>
        <%end%> >
        <%= errorsrate %> </td>


Я ожидаю, что будет так:
<td class="green">
        8</td>


А получается так:

<td
  >
        8 </td>

В данном конкретном случае errorsrate точно не string.
Что я делаю не так?
  • Вопрос задан
  • 2293 просмотра
Решения вопроса 1
viktorvsk
@viktorvsk
Ладно разметка. Но где логика?
По вашему коду, что бы получить
<td class="green">
        8</td>

нужно, что бы :
1) @statistics[service] НЕ имел ключа errorsrate
2) Был String
3) Был больше 5 (противоречит условию 2)

В данном конкретном случае errorsrate точно не string.

Поверьте, там НЕ String, иначе была бы ошибка
ArgumentError: comparison of String with 8 failed

(Попробуйте в консоли сравнить "-" > 5)

В общем, на самом деле беда не форматированию, а описанию задачи. Похоже на лабораторную в универе - a = x + 1 - b ...

Что сделать-то нужно ?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Freika
@Freika
Senior Ruby on Rails developer
Во-первых, под "не так" попадает использование логики в шаблонах вьюх.
Во-вторых, форматирование дикое просто, но это на работу не должно влиять.
В третьих и вероятнее всего, дело в том, что ваш второй if
находится в интерпретирующем теге erb: <%= %>
А должно быть <% %>
Ответ написан
@ruby90 Автор вопроса
Точно. Виктор, огромное вам спасибо, что "размылили" мне глаза. Совершенно очевидная ошибка, на самом деле.

<td 
       <% if @statistics[ntag].has_key?(:errorsrate)
          errorsrate = @statistics[ntag][:errorsrate].to_i
        else
          errorsrate = "-"  
        end%>
        <%=
        if !errorsrate.is_a?(String)
          if errorsrate > 5
            'class="red"' 
          else 
            'class="green"'
          end  
        end %>>
        <%= errorsrate %> </td>


Работает же,не взирая на дикое форматирование, понять бы как его сделать менее диким.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы