我使用动态菜单来解决这个问题:
我改变了:
= f.collection_select :with_country_id,@filterrific.select_options[:with_country_id]
= f.collection_select :with_region_id,@filterrific.select_options[:with_region_id]
到:
= f.collection_select :with_country_id, Country.order(:name), :id, :name, {}, { class: 'class'}
= f.grouped_collection_select :with_region_id, Country.order(:name), :regions, :name, :id, :name, include_blank: true
JS
:
(function() {
jQuery(function() {
var regions;
regions = $('#filterrific_with_region_id').html();
if($('#filterrific_with_country_id option').is(':selected')){
var country, escaped_country, options;
country = $('#filterrific_with_country_id :selected').text();
escaped_country = country.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
options = $(regions).filter("optgroup[label='" + escaped_country + "']").html();
if (options) {
$('#filterrific_with_region_id').html('<option value="">(Select one)</option>'+options);
} else {
$('#filterrific_with_region_id').html('<option value="">Please Select a Country</option>');
}
return $('#filterrific_with_country_id').change(function() {
var country, escaped_country, options;
country = $('#filterrific_with_country_id :selected').text();
escaped_country = country.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
console.log(escaped_country);
options = $(regions).filter("optgroup[label='" + escaped_country + "']").html();
if (options) {
$('#filterrific_with_region_id').html('<option value="">(Select one)</option>'+options);
} else {
$('#filterrific_with_region_id').html('<option value="">Please Select a Country</option>');
}
});
} else {
console.warn('NOT SELECTED');
return $('#filterrific_with_country_id').change(function() {
var country, escaped_country, options;
country = $('#filterrific_with_country_id :selected').text();
escaped_country = country.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
console.log(escaped_country);
options = $(regions).filter("optgroup[label='" + escaped_country + "']").html();
if (options) {
$('#filterrific_with_region_id').html('<option value="">(Select one)</option>'+options);
} else {
$('#filterrific_with_region_id').html('<option value="">Please Select a Country</option>');
}
});
}
});