我有三个模特
City
belongs_to :country
Country
has_many :cities
User
belongs_to :city
在用户表单中我想做两个选择,第一个是选择一个国家
<%= f.collection_select :country_id, Country.all, :id, :name, options = {:prompt => 'Select a Country'}, html_options = {class:"form-control", required:true} %>
这对我来说很好。但问题是选择一个城市,我不知道如何只列出所选国家的城市。我读过有关grouped_collection_select但我无法解决我的问题。
我该怎么做?谢谢!
P.D:我不想使用宝石。
我使用grouped_collection_select
解决了这个问题<%= f.grouped_collection_select :city_id, Pais.order(:name),:cities,:name, :id, :name, options = {:prompt => 'Select a City'}, html_options = {class:"form-control", required:true}%>
和jquery
$(function() {
filterCitiesList();
})
function filterCitiesList() {
$('#user_city_id').hide();
users = $('#user_city_id').html();
$('#user_country_id').change(function() {
country_id = $('#user_country_id :selected').text();
optgroup = "optgroup[label='" + country_id + "']"
options = $(cities).filter(optgroup).html();
if (country_id != "Select Country") {
$('#user_city_id').show();
$('#user_city_id').html(options);
}
else{
$('#user_city_id').hide();
}
});
}
现在我有另一个问题。我是模态窗口,当我隐藏国家模式时,我使用
<%= select_tag "countries",options_from_collection_for_select(Country.all, "id", "name"), {id:"user_country_id", name:"user[country_id]",include_blank: 'Select Country', class: "form-control"}%>
我使用option_groups_from_collection_for_select
解决了这个问题<%= select_tag "cities",option_groups_from_collection_for_select(Country.order(:name), :cities, :name, :id, :name), {id:"user_city_id", name:"user[city_id]",include_blank: 'Select City', class: "form-control"} %>
感谢您的回答!
答案 0 :(得分:1)
您可以尝试使用Ajax和Javascript解决此问题。
这是基本的想法。