Rails-嵌套content_tagRails-嵌套content_tag(Rails- nest

2019-05-13 08:30发布

我试图巢内容标签到自定义帮手,创造这样的事情:

<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,则显示的标签。

谢谢!

Answer 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 ,将只显示最后返回的字符串。



Answer 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

来源: 在Rails 3中嵌套content_tag



Answer 3:

我使用一个变量,CONCAT帮助更深的嵌套。

def billing_address customer
  state_line = content_tag :div do
    concat(
      content_tag(:span, customer.BillAddress_City) + ' ' +
      content_tag(:span, customer.BillAddress_State) + ' ' +
      content_tag(:span, customer.BillAddress_PostalCode)
    )
  end
  content_tag :div do
    concat(
      content_tag(:div, customer.BillAddress_Addr1) +
      content_tag(:div, customer.BillAddress_Addr2) +
      content_tag(:div, customer.BillAddress_Addr3) +
      content_tag(:div, customer.BillAddress_Addr4) +
      content_tag(:div, state_line) +
      content_tag(:div, customer.BillAddress_Country) +
      content_tag(:div, customer.BillAddress_Note)
    )
  end
end


Answer 4:

建立嵌套内容标签与迭代是一个有点不同,每次都使我...这里是一个方法:

      content_tag :div do
        friends.pluck(:firstname).map do |first| 
          concat( content_tag(:div, first, class: 'first') )
        end
      end


文章来源: Rails- nested content_tag