2013-07-10 27 views
11

Tôi có hai menu thả xuống trong chế độ xem và tôi đang cố gắng cập nhật tùy chọn thả xuống thứ hai dựa trên giá trị đã chọn từ trình đơn thả xuống đầu tiên.Cập nhật chọn thẻ động với ajax trong đường ray

Tôi biết Railscasts về chủ đề này, nhưng tôi không muốn sử dụng các bộ sưu tập được nhóm; Lý do cho điều này chủ yếu là người dùng có thể chọn từ một menu thả xuống, hoặc kết quả khác được lọc theo đó, menu thả xuống thứ hai chỉ lọc tùy chọn của nó khi giá trị từ menu thả xuống đầu tiên được chọn.

Câu hỏi của tôi là, làm thế nào tôi có thể điền lại các tùy chọn select_tag từ tệp js.erb?

dạng

<%= form_tag("filter", :id => "filter_form", :method => "post") do %> 
     <label for="company_id" class="company">Company</label><%= select_tag(:company_id, options_from_collection_for_select(Company.all.order(:name), :id, :name), :prompt => "All Companies") %> 
     <label for="product_id" class="product">Product</label><%= select_tag(:product_id, options_from_collection_for_select(Product.all.order(:name), :id, :name), :prompt => "All Products") %> 
    <% end %> 

js.coffee

$('#company_id').change(-> 
    sendFilterForm() 
) 

sendFilterForm = -> 
    $.get($('#filter_form').attr('action'), $('#filter_form').serialize(), 'script') 

khiển

@filterProducts = true 
@products = Product.where(company_id: params[:company_id]).order(:name) 

js.erb

<% if @filterProducts %> 
    $('#product_id').html(<%= options_from_collection_for_select(@products, :id, :name) %>); 
<% end %> 

Vì vậy, phần cuối cùng rõ ràng là hoàn toàn sai lầm, nhưng đó là khái niệm về những gì tôi đang cố gắng làm. Cách thích hợp để thực hiện điều này là gì? Tôi mở để làm lại điều này, nếu cần thiết, bất kỳ trợ giúp nào được đánh giá cao.

+0

Bạn có kho lưu trữ github này không? Có lẽ cho Rails 4? –

Trả lời

18

Thêm escape_javascript để thoát khỏi trả lại của nhà cung cấp dịch vụ, báo giá đơn và đôi được tạo bởi options_from_collection_for_select.

Tôi không thấy bất kỳ sự cố nào khác ngoại trừ việc thêm cuộc gọi đến escape_javascript. Vui lòng thử những điều sau trong số js.erb:

<% if @filterProducts %> 
    $('#product_id').html("<%= escape_javascript options_from_collection_for_select(@products, :id, :name) %>"); 
<% end %> 
+1

Chà. Làm thế nào tôi đã bỏ qua đó :-) Cũng cần thiết để bọc các cuộc gọi ruby ​​nhúng trong dấu ngoặc kép trong html(). Cảm ơn! – Drew

+0

@Drew, Có bạn đã đi, tôi đã cập nhật câu trả lời của tôi thêm dấu ngoặc kép. – vee

+0

Bạn có kho lưu trữ github không? Có lẽ cho Rails 4? –

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