2013-07-10 19 views
11

Bir görünümde iki açılırum var ve ilk açılan menüden seçilen değer temelinde ikinci açılır menü seçeneklerini güncellemeye çalışıyorum.Seçili etiketi ajax ile raylarda dinamik olarak güncelle

Bu konudaki Demiryollarının farkındayım, ancak gruplandırılmış koleksiyonları kullanmak istemiyorum; Bunun nedenleri öncelikle kullanıcının bir açılır menüden ya da diğerinden seçebileceği ve sonuçların buna göre filtreleneceği, ilk açılan menüden sadece seçeneklerinin ilk açılır listeden bir değer seçildiğinde filtrelenmesidir.

Sorunuz, select_tag seçeneklerini js.erb dosyasından nasıl yeniden doldurabilirim?

şekilde

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

kontrol

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

Yani son bölüm Açıkçası oldukça yanlıştır, ama bu yapmaya çalıştığım şeyin kavramdır. Bunu gerçekleştirmenin doğru yolu nedir? Gerekirse yeniden çalışıyorum, gerekirse herhangi bir yardım takdir ediliyor.

+0

Bu bir github depo var mı: En js.erb aşağıdaki deneyin? Belki Rails 4 için? –

cevap

18

options_from_collection_for_select tarafından oluşturulan tek ve çift tırnaklı aktarımlardan kaçınmak için escape_javascript'u ekleyin.

escape_javascript numaralı telefona çağrı ekleme dışında başka bir sorun görmüyorum.

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

Vay. Bunu nasıl gözden kaçırdım :-) Ayrıca gömülü ruby ​​çağrısını html() içindeki tırnak içine sarmak gerekiyordu. Teşekkürler! – Drew

+0

@Drew, Evet işte, cevaplarımı ekleme tırnaklarımı güncelledim. – vee

+0

Bununla bir github deponuz var mı? Belki Rails 4 için? –

İlgili konular