9

Sto tentando quanto segue. Un'opzione di selezione cliente nel modulo principale. quando un utente seleziona un cliente nella forma principale, le sue fatture dovrebbero apparire in tutti i partial successivi.Azione predefinita eseguita da jQuery sui dati parziali in ruby ​​su rotaie

Sto utilizzando gemma nested_form di ryan bates per ottenere il partial. il codice è il seguente.

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

all'interno parziale

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

il codice jQuery per quanto sopra è il seguente

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); 
    }); 
    }); 
    }); 

ed infine nel controllore ho. get_bills def

@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 

stavo cercando di filtrare le bollette e mettere in div id bill. Ora se faccio un console.log nel codice jQuery sto ricevendo il customer_id e le fatture, ma non sono in grado di postarlo. se faccio console.log su child ottengo l'output come questo jQuery(). dove sto andando storto? c'è un modo migliore per ottenere quanto sopra? guida richiesta Grazie in anticipo.

risposta

7

Personalmente preferisco il modo di inserire HTML in partial, invece di disegnarlo con il codice JS.

Ti piace questa:

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

Con un minor numero di linee di codice ci sono meno posti per errori da insinuarsi.

+0

Grazie, questo è fantastico :) ma come applicare il metodo sopra per una forma annidata? correggimi se sbaglio, credo che si applichi a un solo parziale. – deeraj