[ruby-on-rails] 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를 주석 처리하면 레이블이 표시됩니다.

감사!



답변

+빠른 수정 이 필요합니다 : 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마지막으로 반환 된 문자열 만 표시됩니다.


답변

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


답변

더 깊은 중첩을 돕기 위해 변수와 연결을 사용합니다.

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


답변

반복을 사용하여 중첩 된 콘텐츠 태그를 작성하는 것은 약간 다르며 매번 저를 얻습니다. 여기 한 가지 방법이 있습니다.

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


답변