ruby-on-railsruby-on-rails-4string-concatenationcontent-tag

How to create multiple content_tags using safe_concat ?


I'm trying to concatenate multiple tags using content_tag and safe_concat, something like:

content_tag(:select, multiple: "multiple", :name => "contact[resources]") do
    content_tag(:optgroup, label: "LABEL", id: "some-id") do 
      safe_concat(
        if condition1
          (content_tag(:option, value: "val1") { "Val1" } )
        end
        if condition2
          (content_tag(:option, value: "val2") { "Val2" } )
        end              
      )
    end                
  end

But I keep getting the following error:

syntax error, unexpected keyword_if, expecting ')' 
syntax error, unexpected end-of-input, expecting keyword_end

Solution

  • you need to wrap every single output in safe_concat, like

    content_tag(:select, multiple: "multiple", :name => "contact[resources]") do
      content_tag(:optgroup, label: "LABEL", id: "some-id") do 
        if condition1
          safe_concat(content_tag(:option, value: "val1") { "Val1" } )
        end
        if condition2
          safe_concat(content_tag(:option, value: "val2") { "Val2" } )
        end              
      end                
    end