2011-02-15 8 views
9

확인란을 사용할 수 있도록하려면 확인란을 "목표로"해야하는 대신 텍스트를 선택할 수 있도록 일반적으로 확인란을 레이블에 추가합니다.label_tag 및 checkbox_tag 레일에 문제가 있습니다

문제는 레일에 중첩 된 속성 양식을 사용하면 어떻게됩니까? 이제이 코드가이와

%ul 
    - test_category.test_cases.each do |test_case| 
    %li 
     = check_box_tag "job_test_cases[]", "#{test_case.id}", test_case.id 
     = label_tag "test_case_#{test_case.id}", test_case.name 

문제는이 발생한다는 것입니다 :

<li> 
    <input type="checkbox" value="70" name="job_test_cases[]" id="job_test_cases_" checked="checked"> 
    <label for="test_case_70">Blah blah</label> 
</li> 

내가 이렇게되고 싶었 반면 :

<li> 
    <input type="checkbox" value="70" name="test_case_id[]" id="test_case_70" checked="checked"> 
    <label for="test_case_70">Blah BLah blah/label> 
</li> 
+0

출력은 'check_box_tag'을 사용하는 방법에서 기대 한 바가 전혀 없습니다 :/모든 http : /에서 문서와 일치하지 않는 것 같습니다. /api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag – raidfive

+0

나는 혼란 스럽다. -_- – corroded

+0

오, 기다려라. 나는 틀린 것을 붙여 넣었다. .. 편집해라. – corroded

답변

0

중첩 된 형태를하고 필드 이름이 올바르게 지정되었는지 확인하려면 대신 fields_for이 필요합니다.

중첩 된 양식을 크게 단순화하는 formtasticcocoon을 살펴 보시기 바랍니다.

: 당신이 이상하게 뭔가 잘못을하기 때문에 내가, 내가 코드를 수정할 수 있습니다 확실하지 않다

[편집 스스로 일] : 당신이 가능하게 점검 할 가치있는 내가 이해가 안 돼요? 당신은 그것을 보내지 않습니다. 그것은 이드가 될 수 없습니다. 코드를 수정하는 것은 단지 것 : 그래서 일반적으로 당신이 뭔가를 쓰기

check_box_tag "test_case[#{test_case.id}]", test_case.is_checked? 

곳 부울 값의 어떤 종류를 반환 is_checked? 분야. 나는 당신이하려고하는 것에 대해 조금 더 많은 정보를 주면 도움이 될 것이라고 생각합니다. true을 반환 is_checked?을 부여

<input type="checkbox" value="true" name="test_case[70]" id="test_case_70" checked="checked"> 

같은 것을 생성 할

.

에서 : 당신이 명시 적으로 다르게 idname 이름을 지정할 경우, 다음과 같이

, 당신은 너무

check_box_tag "test_case[#{test_case.id}]", test_case.is_checked?, test_case.is_checked?, :name => 'bla', :id => 'other_bla' 
+0

비록 내가 양식 필드 이름과 관련이 있지만, 그 레이블을 할 수 있도록 그 일을하지 않는 ID가 필요합니다. 그들은 그것을 어떻게 구현하는지 알고 있습니까? (formtastic에 대해 알고 있습니다) – corroded

+0

나는 대답을 시도했지만 더 많은 정보가 필요합니다. 확실하지 않은 것은 무엇을 의미합니까? formtastic을 사용하면 레이블 값을 쉽게 무시할 수 있습니다. 생성 된 html에 대한 더 많은 제어권이 있다면 simple_form을 확인하십시오. 그러나 어떤 경우에는 손으로 모든 것을 할 수 있어야합니다. – nathanvda

+0

실제로 코드는 제 동료가 작성 했으므로 params에서 test_cases 배열을 가져와야합니다. 따라서 ID가 test_case []이고 값이 71, 72 등입니다. 양식을 제출하면 test_cases [] => {71, 72}. 난 그냥 레이블과 함께 그런 식으로 일하고 싶지만, 모든 체크 박스는 test_case []의 ID를 가져야하기 때문에 체크 박스 ID가 폐색된다. 그게 내 계획을 잘 설명하니? – corroded

8

내가 레이블이 체크 박스를 일치시킬 수처럼 명시 적으로 설정해야합니다 확인란 : check_box_tag를 사용하여 특정 항목 이름 (여기서는 역할)을 배열 색인으로 지정하여 값이있는 id를 생성했습니다.다음 HTML 생성

check_box_tag "user[roles][#{role.to_s}]", role.to_s, @user.has_role?(role), :name => "user[roles][]" 

: 그것은 ID가없는 있도록 check_box_tag에 지정된 이름을 대체 할 이름의 해시 값 : 나는 통과 레이블에서

<input id="user_roles_ROLE1" name="user[roles][]" type="checkbox" value="ROLE1" /> 

을, I 다음 HTML을 생성

label_tag "user_roles_#{role}", cur_role.role_name, :class => 'span_after_label' 

: 제대로 라벨의 ID를 가리 키도록, 배열 이름 + '_'플러스 항목 이름 (여기서는 역할)를 사용하여 ID를 지정

<label class="span_after_label" for="user_roles_ROLE1">User</label> 

풋가 컨트롤러에 전송되면 PARAMS에는 다음 필드가 있습니다 확인 된 모든 역할에 대한 역할 이름입니다

"user"=>{ ..., "roles"=>["ROLE1", "ROLE2", "ROLE3"], ... } 

합니다.

따라서 코드, 나는 다음을 시도합니다 :

check_box_tag "test_case_id[#{test_case.id}]", "#{test_case.id}", test_case.id, :name => "test_case_id[]" 
관련 문제