Вложенные рельсы content_tag

Я пытаюсь вставить теги контента в пользовательский помощник, чтобы создать что-то вроде этого:

<div class="field">
   <label>A Label</label>
   <input class="medium new_value" size="20" type="text" name="value_name" />
</div>

Обратите внимание, что вход не связан с формой, он будет сохранен через javascript.

Вот помощник (он сделает больше, чем просто отобразит html):

module InputHelper
    def editable_input(label,name)
         content_tag :div, :class => "field" do
          content_tag :label,label
          text_field_tag name,'', :class => 'medium new_value'
         end
    end
end

<%= editable_input 'Year Founded', 'companyStartDate' %>

Однако ярлык не отображается, когда я вызываю помощника, отображается только вход. Если он закомментирует text_field_tag, появится метка.

Спасибо!

Ответ 1

Для быстрого исправления вам понадобится +: D

module InputHelper
  def editable_input(label,name)
    content_tag :div, :class => "field" do
      content_tag(:label,label) + # Note the + in this line
      text_field_tag(name,'', :class => 'medium new_value')
    end
  end
end

<%= editable_input 'Year Founded', 'companyStartDate' %>

Внутри блока content_tag :div будет отображаться только последняя возвращаемая строка.

Ответ 2

Вы также можете использовать метод concat:

module InputHelper
  def editable_input(label,name)
    content_tag :div, :class => "field" do
      concat(content_tag(:label,label))
      concat(text_field_tag(name,'', :class => 'medium new_value'))
    end
  end
end

Источник: Вложение content_tag в Rails 3