我在编辑页面上分别在城市和国家/地区的页面上输入和下拉:
= f.input :city
= f.input :country, collection: country_list
这里是如何在服务器上更新的:
if @my_model.update_attributes(get_permitted_params) #...
我想用一个包含grouped_options_for_select
的下拉菜单替换它们,以便同时显示城市和国家/地区:
= f.select(:city, grouped_options_for_select(country_with_cities_list))
f.select
中的第一个参数?它不仅是城市,也不仅仅是国家。这两者都是。 if @my_model.update_attributes(get_permited_params) #...
让它像以前一样运作?答案 0 :(得分:1)
您仍然必须使用:city
作为该表单字段的第一个参数。
使用grouped_options_for_select
,仅倾向于将国家/地区optgroup
标签下的城市设置组合在一起。但是,您最终只会选择一个城市的option
。例如:
<optgroup label="England">
<option value="Bedfordshire">Bedfordshire</option>
<option value="Berkshire">Berkshire</option>
<option value="Bristol">Bristol</option>
</optgroup>
如果您还必须设置country
,则必须在控制器端手动执行此操作。
对于country_with_cities_list
,请确保它对应于数组[["England", ["Bedfordshire", "Berkshire", "Bristol"]],...]
(或它的等效哈希)。
下面的内容(未经测试)可以提供帮助。它将一组城市(及其相应的ID)分组为一个国家/地区:
@cities = City.all(include: country)
country_with_cities_list = @cities.inject({}) do |hash, city|
(hash[city.country.name] || = []) << [city.name, city.id]
hash
end