Более симпатичный ERB, условно добавляющий класс элемента

#ruby-on-rails #ruby #erb

#ruby-на-рельсах #рубин #эрб #ruby-on-rails #ruby #ошибка

Вопрос:

Я пытаюсь научиться писать более красивым шрифтом ERB. Как я мог бы отформатировать это, чтобы выглядеть красивее?

 <% site.data.navigation.each { |item| %>
  <a href="<%= item.link %>"
      <% if page.url == item.link %>class="current"<% end %>>
    <%= item.name %>
  </a>
<% } %>
  

в частности, обертывание вокруг class="current" просто кажется неуклюжим. Я ищу лучший способ, который не включает какой-либо вспомогательный метод. Есть ли что-нибудь почище?

Ответ №1:

Я делаю много изменений CSS через ERB. Мне нравится делать такие вещи, как:

 <% site.data.navigation.each { |item| %>
  <a href="<%= item.link %>" 
    class="<%= (page.url == item.link) ? 'current', '')%>" >
      <%= item.name %>
  </a>
<% } %>
  

Хотя я стараюсь не допускать, чтобы строки выходили за пределы экрана моего редактора, с HTML я не применяю это так сильно, потому что мне нравится видеть тег как одну строку:

  <% site.data.navigation.each do |item| %>
   <a href="<%= item.link %>" class="<%= (page.url == item.link) ? 'current', '')%>" >
      <%= item.name %>
   </a>
<% end %>
  

Для меня это показывает внешний цикл, затем тег, затем содержимое тега и, наконец, закрывающий тег. Также я не использую {} для многострочных циклов.

Комментарии:

1. Спасибо. я предполагаю, что троичный оператор немного чище, хотя, как вы показали, class = всегда будет существовать, просто в конечном итоге как class=»» , но я мог бы, конечно, поместить все это в троичный оператор.

2. Правда, я обычно использую что-то подобное для работы в Bootstrap. Поэтому мой троичный оператор переключает его между такими понятиями, как «успех» и «опасность», чтобы изменить цвета. Class= ничего не повредит, поскольку вы все равно не применяете к нему класс.

3. Мое главное эмпирическое правило с ERB заключается в том, что код ERB всегда должен выделяться из HTML, чтобы мне и разработчику, специализирующемуся на HTML, было легко читать. Также я стараюсь использовать link_to везде, где это возможно, но иногда это попадает на странную территорию html_escape.

4. имеет смысл. у меня нет link_to здесь.