在ul上通过迭代Rails content_tag

时间:2019-01-02 19:40:45

标签: ruby-on-rails

我有一个文本字段,用户可以输入要转换为列表项的数据。因此,他们可以在文本区域中输入:

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”,“扳手”]

所以看起来它没有在列表项上应用迭代,所以我尝试了以下操作:

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 :(得分:0)

each返回数组,因此content_tag :ul的块将接收数组本身作为内部HTML。显然这不是您想要的。

为了将HTML添加到输出缓冲区,您可以使用concat

content_tag :ul do
  regional_service.each do |service|
    concat content_tag(:li, service)
  end
end