Erb string интерполяция генерирует неправильный синтаксис html

У меня в поле зрения есть эти строки:

<%
  if current_user.is_fav?(a)
    cls = "product fav"
  else
    cls = "product"
  end
%>

и позже

<div class=<%= cls %> >

Это производит:

<div class="product" fav>

Обновлено: как говорится в ответе, он НЕ произвел этого, это был браузер, который «осмотрел» это показал мне.

Я могу обойти это, но почему приведенный выше код не работает?

2
0
93
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

<div class=<%= cls %> >

вероятно должно быть

<div class="<%= cls %>">

Вы подставляете строку в заполнитель erb, но базовый шаблон не указывает, что заполнитель сам по себе является строкой. ERB, вероятно, изо всех сил пытается внести коррективы, но явно не в состоянии с этим справиться. Edit: Серджио указал, что это, скорее всего, делает браузер, а не ERB.

Ответ принят как подходящий

This produces:

<div class="product" fav>

Нет, это не так. Выдает <div class=product fav>. То, что вы видеть (через что-то вроде "inspect element", правильно?) - это браузер, пытающийся интерпретировать вашу сломанную разметку как можно ближе к спецификации html.

Как отмечалось в других ответах, вместо этого вам следует сделать что-то вроде этого:

<div class="<%= cls %>">

верный! Я использовал элемент inspect и понятия не имел, что он работает именно так. Кроме того, браузер отображает только первый класс, что меня застало врасплох.

Peter Andersson 31.10.2018 12:39

Другие вопросы по теме