Loop & output content_tags within content_tag in helper

后端 未结 5 1520
我在风中等你
我在风中等你 2020-12-23 11:45

I\'m trying a helper method that will output a list of items, to be called like so:

foo_list( [\'item_one\', link_to( \'item_two\', \'#\' ) ... ] )
         


        
5条回答
  •  伪装坚强ぢ
    2020-12-23 12:32

    The big issue is that content_tag isn't doing anything smart when it receives arrays, you need to send it already processed content. I've found that a good way to do this is to fold/reduce your array to concat it all together.

    For example, your first and third example can use the following instead of your items.map/collect line:

    items.reduce(''.html_safe) { |x, item| x << content_tag(:li, item) }
    

    For reference, here is the definition of concat that you're running into when you execute this code (from actionpack/lib/action_view/helpers/tag_helper.rb).

    def concat(value)
      if dirty? || value.html_safe?
        super(value)
      else
        super(ERB::Util.h(value))
      end
    end
    alias << concat
    

提交回复
热议问题