2016-03-05 48 views
0

該應用程序有一個類別,類別有子類別和品牌。當用戶選擇分類時,加載分類品牌和子類別。在創造形式中,所有的煩惱都很好。動態變化grouped_collection_select編輯形式

_form.html.slimm

= form_for @advert do |f| 
    - @advert.errors.full_messages.each do |msg| 
    div class='msg' 
     = msg 

    div class='form-group' 
    = f.label :category 
    = f.collection_select :category_id, Category.order(:id), :id, :title, { prompt: t("forms.selecte.choose-category")} 

    div class='form-group' 
    = f.label :subcategory 
    = f.grouped_collection_select :subcategory_id, Category.order(:id), :subcategories, :title, :id, :title,{ prompt: t("forms.selecte.choose-subcategory")} 

    div class='form-group' 
    = f.label :brand 
    = f.grouped_collection_select :brand_id, Category.order(:id), :brands, :title, :id, :title,{ prompt: t("forms.selecte.choose-brand")} 

    div class='form-group' 
    = f.label :title 
    = f.text_field :title, class: 'form-control' 

    div class='form-group' 
    = f.label :content 
    = f.text_area :content, size: '60x12', class: 'form-control' 

    = f.submit t('forms.buttons.submit') 

advert.coffee

ready = -> 
    jQuery -> 
    $('#advert_subcategory_id').parent().hide() 
    $('#advert_brand_id').parent().hide() 
    subcategories = $('#advert_subcategory_id').html() 
    brands = $('#advert_brand_id').html() 
    $('#advert_category_id').change -> 
     category = $('#advert_category_id :selected').text() 
     escaped_category = category.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1') 
     options_subcategories = $(subcategories).filter("optgroup[label='#{escaped_category}']").html() 
     options_brand = $(brands).filter("optgroup[label='#{escaped_category}']").html() 
     if options_subcategories 
     $('#advert_subcategory_id').html(options_subcategories) 
     $('#advert_subcategory_id').parent().show() 
     else 
     $('#advert_subcategory_id').empty() 
     $('#advert_subcategory_id').parent().hide() 
     if options_brand 
     $('#advert_brand_id').html(options_brand) 
     $('#advert_brand_id').parent().show() 
     else 
     $('#advert_brand_id').empty() 
     $('#advert_brand_id').parent().hide() 

但在編輯表單代碼是不工作,因爲它應該。子類別和品牌未加載。要更改它們,用戶必須更改類別。加載編輯表單時必須顯示已選擇的子類別和品牌。如何解決它?

解決方案:

$(window).load -> 
     category = $('#advert_category_id :selected').text() 
     escaped_category = category.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1') 
     options_subcategories = $(subcategories).filter("optgroup[label='#{escaped_category}']").html() 
     options_brand = $(brands).filter("optgroup[label='#{escaped_category}']").html() 
     if options_subcategories 
     $('#advert_subcategory_id').html(options_subcategories) 
     $('#advert_subcategory_id').parent().show() 
     else 
     $('#advert_subcategory_id').empty() 
     $('#advert_subcategory_id').parent().hide() 
     if options_brand 
     $('#advert_brand_id').html(options_brand) 
     $('#advert_brand_id').parent().show() 
     else 
     $('#advert_brand_id').empty() 
     $('#advert_brand_id').parent().hide() 

代碼複製,但它的工作原理。

回答