https://github.com/saberma/china_city
这是一个基于 Rails Engine 开发的插件,为 Rails 项目增加省市区三级(或者省市二级)选择框,可用于实现收货地址等信息的录入。
Gemfile gem 'china_city'
app/assets/javascripts/application.js //= require 'jquery' //= require 'china_city/jquery.china_city'
config/routes.rb mount ChinaCity::Engine => '/china_city'
在页面中加入选择框,示例代码使用 slim 格式
.city-group
select.city-select
option --省份--
= options_for_select(ChinaCity.list)
select.city-select
option --城市--
select.city-select
option --地区--
建议: 感觉区域级联的应该交给 js 来处理,如果一定要用 rails 的话可以只给个 task 任务导出当前的省市区固定的 json 格式的文件
比如:https://code.google.com/p/tex-website/source/browse/trunk/Web/Js/LinkageSelect.js?spec=svn6&r=6
#8 楼 @Ddl1st 需要 select2 支持的话推荐 https://github.com/Kehao/district_cn_selector 这个项目,不过略重,作者对 ux 的需求很高
#17 楼 @saberma 行政区域编码有国标 https://github.com/huobazi/GB2260 精确到区县一级数据不多,但到村、街道办大概 要 80 多万条数据
#28 楼 @Levan 我给你讲,咱的 https://github.com/jasl/a_rails_start_up_omakase/blob/master/lib/form_helpers/district.rb https://github.com/jasl/a_rails_start_up_omakase/blob/master/app/assets/javascripts/district_selects.js.coffee https://github.com/jasl/a_rails_start_up_omakase/blob/master/app/controllers/district_controller.rb
必须山寨过...saberma 的这个是来自原来的 shopqi 项目,bug 都一样的,当然咱的也是从那里”借“来的,而且改过 bug 啦
#49 楼 @gechentuo 看 readme
选择后的值为国家地区编码,如深圳市的为 440300,可通过调用 ChinaCity.get('440300') 将编码转化为城市名称。
所以,你可以通过形如 ChinaCity.get(user.district)
方式去将地区码转化成可读取的形式,通常我们也可以将它封装成 helper,如
def humanize_district(code)
ChinaCity.get code
end
那么,能不能将 @user.dictrict
直接变成可读取的文本呢?这个就是 acts_as_的作用啦,你可以想想怎么实现他,目标是
class User
acts_as_china_city :district
end
@user.district = '110000'
puts @user.district # => 北京市
#56 楼 @hqjjsw520 算是 bug 吧。跟踪了下,是返回的对象中还有一个 data 包着数据在。所以取不到值。需要 hack 一下。另外,重复请求也是个问题。
楼主,省市区的数据你是从哪里获取的?我查看了一下国家统计局的数据,发现你的编码将后面的街道给去掉了。 http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2013/index.html
我用的是 simple_form,可 work
<%= simple_form_for [:account,@user] do |f| %>
<div class="city-group">
<%= f.select :province, ChinaCity.list.unshift(["--省份--", 0]), {}, class: "city-select"%>
<%= f.select :city, ChinaCity.list(f.object.province).presence || [["--城市--", 0]], {}, class: "city-select" %>
<%= f.select :area, ChinaCity.list(f.object.city).presence || [["--地区--", 0]], {}, class: "city-select" %>
</div>
<%= f.submit "更新资料", class: "btn btn-default" %>
<% end %>
你好,我现在用您这个插件遇到个问题,我写了一个步骤的 form 表单只要加上 js:bodyTag:"fieldset"就不能够联动获取到市区两级,也不报错,后台也没有请求了