2011-02-15 25 views
9

Onay kutularının kullanılabilir olmasını istiyorum, böylece onay kutularına "amaç" yapmak yerine metni seçebilmeniz için genellikle onay kutularına etiket ekleri eklerim.raylar içinde label_tag ve checkbox_tag sorunu

Sorun şu ki, iç içe geçmiş bir öznitelik formunu raylarda kullanıyorum ne olur? Şimdilik bu kodu vardır: Bununla

%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 

sorun bu üretmesidir:

<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> 

Ben böyle olmasını istedim oysa:

<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

Çıktınız Eğer 'kullanarak check_box_tag' nasıl elde Hiç beklediğim gibi değil: /:/tüm http dokümanlar ile maç için görünmüyor Raylar API son örneği inceleyin /api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag – raidfive

+0

Kendimi karıştırdım -_- – corroded

+0

oh bekle yanlış şeyi yapıştırdığımı düşünüyorum ... bunu düzenle – corroded

cevap

0

iç içe formları yapıyor alanlarınızın doğru olarak adlandırıldığından emin olmak için fields_for'a ihtiyacınız vardır (each yerine).

formtastic ve cocoon'a bakmanızı öneririm: bu da iç içe geçmiş formlar oluşturmayı büyük ölçüde kolaylaştıracaktır.

: Eğer garip yanlış bir şey yapmak, çünkü ben kodunuzu düzeltebilirsiniz emin değilim

[DÜZENLEME kendiniz yapıyor]: muhtemelen kontrol edilecek istediğiniz hangi değeri anlamıyorum ?? Onu yollamıyorsun. Kimlik olamazdı. kodunuzu düzeltme sadece olurdu : Yani normalde gibi bir şey yazmak

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

nerede boolean değer bir tür döner is_checked? alanı. Yapmaya çalıştığınız şey hakkında biraz daha bilgi verirseniz yardımcı olacağını düşünüyorum. true dönecekti is_checked? verilen

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

gibi bir şey üretecek

.

yılında: açıkça farklı id ve name isim istiyorsanız aşağıdaki gibi

, bunu

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

Form alanı isimleriyle ilgilenmekle birlikte, bu dizi şeylere sahip olmamak için kimliğe ihtiyacım var, böylece etiketleri kendim yapabilirim. (eğer formtastic hakkında bilgi sahibi olurum) ne yaparlar biliyor musunuz? – corroded

+0

Cevaplama girişiminde bulundum ama daha fazla bilgiye ihtiyacım var. Ne demek istediğinden emin değilim: "etiketleri kendin yapıyorsun". Formtastic ile etiket değerlerini kolayca geçersiz kılabilirsiniz. Oluşturulan html üzerinde daha fazla kontrol varsa, basit_form'a bakın. Ancak bazı durumlarda her şeyi el ile yapabilmeniz gerekir. – nathanvda

+0

aslında kod benim meslektaşım tarafından yapıldı ve o param test_cases bir dizi almak gerekir, böylece id test_case [] formunu gönderirseniz test_case [] ve değer 71, 72, vb. => {71, 72}. Ben sadece etiketlerle bu şekilde çalışmasını istiyorum, ancak onay kutusu kimliği, tüm onay kutularının bir test_kimliği [] kimliğine sahip olması gerektiği için onu mahvediyor. planımı iyi açıklıyor mu? – corroded

8

Ben etiketle onay kutusunu maç başardı gibi, açıkça belirlemesi gerekir onay kutusu: Check_box_tag öğesini kullanarak, özel öğe ismini (burada rol) belirtmek için dizinin indeksi olarak bir öğe değeri belirtin.Aşağıdaki HTML oluşturan

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

: o kimliği yok ki, check_box_tag belirtilen ad geçersiz kılmak için isim karma değerini: Ben geçirilen etiket olarak

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

, ben aşağıdaki HTML oluşturan

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

: düzgün etikette id işaret etmek, dizi adını + '_' artı öğe adını (burada rol) kullanarak id belirtilen

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

PUT denetleyiciye gönderildiğinde, parametreler aşağıdaki alanları vardır: işaretli rollerin tümü için rolü isimleri

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

.

Böylece kodunuz için, aşağıdaki denemek:

check_box_tag "test_case_id[#{test_case.id}]", "#{test_case.id}", test_case.id, :name => "test_case_id[]" 
İlgili konular