2014-07-23 3 views
0

내가 부트 스트랩 스타일을 사용하여 양식 스타일을 FormBuilder 레일을 만들려고 오전 :Content_tag 블록 content_tag 블록 안에 중첩 - 폼 빌더

<div class="form-group has-error"> 
    <label for="exampleInputEmail1">Email address</label> 
    <div class="input-group> 
    <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email"> 
    <span class="input-group-addon glyphicon glyphicon-user"></span> 
    </div> 
    <p class="help-block>can't be blank</p> 
</div> 

나는 단지 하나를했을 때 나는 일을 양식 빌더를 얻을 수있었습니다 div 태그 (전통적인 부트 스트랩 양식에 대한 입력 그룹 제외. 내 문제는 제대로 작동하려면 클래스 "입력 그룹"div 함께 중첩 된 content_tag 가져올 수 없습니다. 요소를 추가하고 content_tag 래핑하는 시도했다. 아무 소용이 없습니다.

class LargeFormBuilder < ActionView::Helpers::FormBuilder 
    include ActionView::Helpers::TagHelper 
    include ActionView::Helpers::CaptureHelper 
    include ActionView::Helpers::TextHelper 

    attr_accessor :output_buffer 

    %w(text_field text_area email_field password_field).each do |form_method| 
    define_method(form_method) do |*args| 
     attribute = args[0] 
     options = args[1] || {} 
     options[:label] ||= attribute 
     options[:class] ||= "form-control input-lg" 
     label_text ||= options.delete(:label).to_s.titleize 
     content_tag(:div, class: "form-group #{'has-error' if !object.errors[attribute].empty?}") do 
     concat label(attribute, label_text, class: "control-label") 
     concat (
      content_tag(:div, class: "input-group") do 
       concat super(attribute, options) 
       concat content_tag(:span, "", class: "input-group-addon glyphicon glyphicon-user") 
      end 
     ) 
     concat errors_for_field(attribute) 
     end 
    end 
    end 

    def errors_for_field(attribute, options={}) 
    return "" if object.errors[attribute].empty? 
    content_tag(:p, object.errors[attribute].to_sentence.capitalize, class: "help-block") 
    end 

end 

답변

2

많은 sim pler 그 사실 방금 명확한 방법으로 동일한 결과를 달성하기 위해 +을 사용할 수 있습니다 concat를 사용할 필요가 없습니다, 단지 첫 번째 문자열이 html_safe

content_tag(:div, class: "form-group #{'has-error' if !object.errors[attribute].empty?}") do 
    label(attribute, label_text, class: "control-label").html_safe + \ 
    content_tag(:div, class: "input-group") do 
    concat super(attribute, options) 
    concat content_tag(:span, "", class: "input-group-addon glyphicon glyphicon-user") 
    end + \ 
    errors_for_field(attribute) 
end 

더욱 가독성

입니다 있는지 확인
content_tag(:div, class: "form-group #{'has-error' if !object.errors[attribute].empty?}") do 
    label_html = label(attribute, label_text, class: "control-label") 

    input_html = content_tag(:div, class: "input-group") do 
    concat super(attribute, options) 
    concat content_tag(:span, "", class: "input-group-addon glyphicon glyphicon-user") 
    end 

    error_html = errors_for_field(attribute) 

    label_html.html_safe + input_html + error_html 
end