web-dev-qa-db-ja.com

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をコメント化すると、ラベルが表示されます。

ありがとう!

78
christo16

すばやく修正するには+が必要です: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のブロック内では、最後に返された文字列のみが表示されます。

148
PeterWong

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

50
lmika

変数と連結を使用して、より深いネストを支援します。

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
1
Sean McMills

繰り返しのあるネストされたコンテンツタグの構築は少し異なり、毎回私を取得します...ここに1つの方法があります:

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