9

Aşağıdakileri denemeye çalışıyorum. Ana formda müşteri seçme seçeneği. Bir kullanıcı ana formda bir müşteri seçtiğinde faturaları sonraki tüm kısmi kısımlarda görünmelidir.Varsayılan eylem, jQuery tarafından raylardaki yakıdaki kısmi veri üzerinde gerçekleştirildi

Kısmen almak için ryan bates'in nested_form gemini kullanıyorum. Kod aşağıdaki gibidir. I olan kontrol son olarak

jQuery(document).ready(function(){ 
    jQuery(".customers select").bind("change", function() { 
     var data = { 
     customer_id: jQuery(this).val() 
     } 
     jQuery.getJSON(
     "/money_receipts/get_bills", 
     data, function(data){ 
     var result = "",a,x; 
     var b = "<option>Select customer Bill</option>" 
     for(i=0;i<data.length; i++) 
     { 
     a = data[i]; 
     result = result + "<option value="+a[0]+">"+a[0]+"</option>"; 
     console.log(result); 
     } 
    child=jQuery('.bill select').html(b+result); 
    }); 
    }); 
    }); 

aşağıdaki ve yukarıdaki kısmi

<div class="bill"> 
<%= f.collection_select :customer_bill_id, CustomerBill.all,:id,:id, {:prompt => "Select Customer bill"}, :style => 'width:202px;' %></div><br /> 

/*rest of the code*/ 

JQuery kodu içinde

<%= simple_nested_form_for @money_receipt do |f| %> 

    <div class="customers"><%= f.collection_select :customer_id, Customer.all, :id, :name, options ={:prompt => "-Select a Customer"}, :style=>'width:210px;'%></div><br /> 
    /*rest of the code*/ 

    <%= f.link_to_add "Add line items", :money_receipt_line_items %> 

olup. def i faturaları filtrelemek teşebbüs ve div id bill kondu

@bill_amount = CustomerBill.find_all_by_customer_id(params[:customer_id]).map{|bill| [bill.id]} if params[:customer_id] 
    respond_to do |format| 
     format.json { render json: @bill_amount } 
    end 
    end 

get_bills. Şimdi jQuery kodunda bir console.log yaparsam, customer_id ve faturaları alıyorum ama gönderemiyorum. child üzerinde console.log yaparsam, bu jQuery() olarak çıktı alırım. Nerede yanlış gidiyorum? Yukarıdakilere ulaşmak için daha iyi bir yol var mı? rehberlik gerekli. Şimdiden teşekkürler.

cevap

7

Kişisel olarak HTML kodunu JS koduyla çizmek yerine kısmi olarak yerleştirmeyi tercih ediyorum. Bunun gibi

: Daha az sayıda hatlarıyla

money_receipt.js:

$('.customers select').change(function(){ 
    $.getScript('/money_receipts/get_bills?customer_id='+$(this).val()) 
}) 

get_bills.js.erb:

$('.bill select').html('<%=j render 'get_bills'%>') 

_get_bills.html.erb:

<% @bills.each do |bill| %> 
<option value="<%=bill.id%>"><%=bill.title%></option> 
<% end %> 

kodun içinde, sürünme hataları için daha az yer vardır.

+0

Teşekkür ederim, bu harika :) ama nasıl iç içe geçmiş bir form için yukarıdaki yöntemi uygulamak için? eğer yanılıyorsam beni düzeltin, bunun sadece bir kısmi uygulayabileceğine inanıyorum. – deeraj