2010-11-17 2 views
66

Я пытаюсь теги контента гнездовых в пользовательском помощник, чтобы создать что-то вроде этого:Rails- вложенная 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, появится метка.

Спасибо!

ответ

135

Вам нужен + для быстрого исправления: 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, будет отображаться только последняя строка возвращается.

+1

опечатка (в комментарии только, но немного сбивает с толку) - "Не * Е * + в этой строке" – Chowlett

+0

После добавления что я получаю синтаксическую ошибку: ошибка синтаксиса, неожиданный tIDENTIFIER, ожидая KDO или '{' или '(' \t \t имя text_field_tag, '',: класс => 'средний NEW_VALUE' \t \t^ – christo16

+0

Я обновил ответ, посмотрим, нормально ли это. – PeterWong

42

Вы также можете использовать 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 

Источник: Nesting content_tag in Rails 3

+0

Это работало для меня до тех пор, пока линия concat была на 1 линии. Я не потратил на это долгое время, так что, возможно, есть способ сделать это многострочным – TerryS

+0

, это будет лучшим способом рассмотрения проблемы html_safe. использование '+' между строкой non-htmlsafe сделает все не-htmlsafe –

Смежные вопросы