Rails嵌套的content_tag

chr*_*o16 80 ruby-on-rails helpers ruby-on-rails-3

我正在尝试将内容标记嵌套到自定义帮助器中,以创建如下内容:

<div class="field">
   <label>A Label</label>
   <input class="medium new_value" size="20" type="text" name="value_name" />
</div>
Run Code Online (Sandbox Code Playgroud)

请注意,输入与表单无关,它将通过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' %>
Run Code Online (Sandbox Code Playgroud)

但是,当我调用帮助程序时,不显示标签,只显示输入.如果它注释掉text_field_tag,则显示标签.

谢谢!

Pet*_*ong 150

你需要+快速修复: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' %>
Run Code Online (Sandbox Code Playgroud)

在块的内部content_tag :div,只显示最后返回的字符串.

  • 这结束了3个小时的人类痛苦,谢谢! (12认同)
  • 感觉很脏...是因为它是帮助程序构建多个内容标签的反模式? (2认同)

lmi*_*ika 52

您还可以使用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
Run Code Online (Sandbox Code Playgroud)

来源:在Rails 3中嵌套content_tag