9

Tôi đang cố gắng như sau. Tùy chọn chọn khách hàng trong biểu mẫu chính. khi người dùng chọn một khách hàng trong biểu mẫu chính, hóa đơn của anh ta sẽ xuất hiện trong tất cả các partials tiếp theo.Hành động mặc định được thực hiện bởi jQuery trên một phần dữ liệu trong ruby ​​trên đường ray

Tôi đang sử dụng đá quý nested_form của ryan bates để lấy một phần. mã như sau.

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

bên trong phần

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

mã jQuery cho ở trên là như sau

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

và cuối cùng trong bộ điều khiển tôi có. def get_bills

@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 

tôi đã cố gắng để lọc các hóa đơn và đưa vào div id bill. Bây giờ nếu tôi làm console.log trong mã jQuery, tôi đang nhận được customer_id và các hóa đơn nhưng tôi không thể đăng nó. nếu tôi làm console.log trên child tôi nhận được kết quả đầu ra là jQuery() này. Tôi làm sai ở đâu? có cách nào tốt hơn để đạt được điều này không? cần có hướng dẫn. Cảm ơn trước.

Trả lời

7

Cá nhân tôi thích cách đưa HTML vào partials thay vì vẽ nó bằng mã JS.

Như thế này:

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

Với dòng ít của mã có ít nơi cho các lỗi để leo.

+0

Cảm ơn bạn, điều này là tuyệt vời :) nhưng làm thế nào để áp dụng các phương pháp trên cho một hình thức lồng nhau? chính xác tôi nếu tôi sai tôi tin rằng điều này áp dụng s chỉ một phần. – deeraj

Các vấn đề liên quan