2009-06-18 2 views
7

여러 모델을 다루는 양식을 쓰고 있습니다. 이 작업을 수행하는 방법에 대한 몇 가지 예는 ActionView::Helpers::FormHelper::label을 사용하고 일부는 ActionView::Helpers::FormTagHelper::label_tag을 사용합니다. 그 차이를 실제로 이해하지 못합니다.FormHelper :: label과 FormTagHelper :: label_tag의 차이점은 무엇입니까?

내 특정 경우

, 모두 동일한 출력 결과를 보인다 :

<% form_for :post, :url => { :action => 'create' } do %> 
    <p> 
    <%= label_tag 'post_type' %><br /> 
    <%= text_field :post, :post_type %> 
    </p> 
    <p> 
    <%= label :post, :parent_post_id %><br /> 
    <%= text_field :post, :parent_post_id %> 
    </p> 
    ... 

가 렌더링 : 아마도 몇 가지 여분이 있기 때문에

<p> 
    <label for="post_type">Post type</label><br /> 
    <input id="post_post_type" name="post[post_type]" size="30" type="text" /> 
    </p> 
    <p> 
    <label for="post_parent_post_id">Parent post</label><br /> 
    <input id="post_parent_post_id" name="post[parent_post_id]" size="30" type="text" /> 
    </p> 

라벨 도우미가 더 유용 할 것 같다 라벨링하는 모델과 속성을 알고 있기 때문에 할 수있는 일이 있지만이를 뒷받침 할만한 것을 찾을 수는 없습니다. 둘 사이에는 실제적인 차이가 있습니까? 다른 쪽 대신 도우미 한 명을 사용해야합니까?

답변

10

레일즈는 두 가지 유형의 양식 도우미를 제공합니다. 모델 도우미와 특별히 작동하는 양식 도우미와 그렇지 않은 도형 도우미가 있습니다. * _tag 도우미는 템플릿에 할당되는 활성 레코드 개체에 의존하지 않는 양식 태그를 만드는 데 사용됩니다. 당신이 보여준으로 label 요소에 대해 생성 된 마크 업에 차이가 없다하더라도이 자동으로 for을 설정하기 때문에

, 당신의 경우에 당신은 다른 형태 헬퍼의 사용과 일치하는 label 폼 헬퍼를 사용한다 속성을 연관된 텍스트 필드 요소의 올바른 ID로 변경하십시오.

2

form_for(...) do |f|으로 만든 양식 개체 안에 있고 모델 특성을 참조하려는 경우 f.label을 사용하십시오. 응용 프로그램이 i18n-ed 인 경우 Rails는 변환을 사용하여 속성 이름을 표시합니다.

양식 개체가없는 경우 label_tag을 사용하십시오. (또는 당신은 양식 객체에 있지만 비 모델 속성에 대한 더미 레이블을 만들려고합니다.)

모든 형태의 입력이 selectselect_tag처럼 함께하고 _tag 접미사없이,이 두 가지 변종이 등

관련 문제