Rails content_tag на ul с итерацией - PullRequest
0 голосов
/ 02 января 2019

У меня есть текстовое поле, которое пользователь вводит в данные, которые я преобразовываю в элементы списка.Таким образом, они могут ввести в текстовой области:

Apple
Tomato
Wrench

Итак, у меня есть следующее, что работает:

 <% regional_services = @region.services.split("\n") %>
  <ul>
   <%regional_services.each do |services| %>
    <li><%=services%></li>
   <%end%>
  </ul>

Он выводит правильно с чем-то вроде

  • Яблоко
  • Помидор
  • Гаечный ключ

Но я пытаюсь заставить его работать в качестве помощника, так как он уродлив в представлении.

Итак, у меня есть следующее:

def other_service
  if @region.services.present?
    something = @region.services.split("\r\n")
    content_tag(:ul) do
      content_tag(:li, something.each {|alpha| alpha })
    end
  else
    content_tag(:p, 'Here is text')
  end
end

В итоге получается вывод:

  • ["Apple", "Tomato", "Wrench"]

Похоже, что он не применяет итерацию к элементу списка, поэтому я попробовал следующее:

def other_service
 if @region.services.present?
   regional_service = @region.services.split("\n")
   content_tag(:ul) do
     regional_service.each do |service|
       content_tag(:li, service)
     end
   end
 else
   content_tag(:p, 'Here is text')
 end
end

Нет ошибки, но на самом деле ничего не отображается на страницах, на которых есть элементы.Итак, как мне сделать content_tag ul с итерацией?

1 Ответ

0 голосов
/ 03 января 2019

each возвращает массив, поэтому блок content_tag :ul сам получит массив в виде внутреннего HTML. Что, видимо, не то, что вы хотели.

Чтобы добавить HTML в выходной буфер, вы должны использовать concat:

content_tag :ul do
  regional_service.each do |service|
    concat content_tag(:li, service)
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...