如何让country_select gem和simple_form从头开始工作?
我只想要一个简单的国家/地区下拉列表,按照我的目的排列优先顺序(即包括所选国家/地区内的州)。
事实上,我只想要1个或2个国家。
我正在使用Simple_Form,他们的文档说,为了获得访问权限:
f.input :shipping_country, priority: [ "Brazil" ], collection: [ "Australia", "Brazil", "New Zealand"]
我只需要在我的Gemfile中包含它:
gem 'country_select'
但我很困惑……我不必运行迁移来将国家选择存储在我的Post
模型上 – 这是我将修改_form.html.erb
的模型?
当我这样做时:
我no country method on Post
错误no country method on Post
有一个no country method on Post
。 我不得不将它添加到我的Post.rb
:
attr_accessor :country
如果我的记忆正确地为我服务,那么由于强参数,我不再需要在Rails 4中做,对吧?
这有效,但现在collection:
规范不起作用。 我仍然看到很多国家。
请记住,我没有必要运行任何迁移来修改Post.rb
模型。 我不知道要添加哪些列。 我是否将country, state, city
添加到我的Post
模型中,还是创建一个名为Country
的新模型?
关于gem中的国家(国家代码,城市,州等)的所有信息都是通过Gem中的YAML文件加载的吗?
我没有任何线索,文档非常稀疏。
所以我的问题只是这些:
- 如何使这个
simple_form
集合起作用。 - 如何让国家的其他属性出现在表单中(如州和/或城市)?
- 我是否必须在某个表格中提供其他数据?
- 如何将用户选择的国家/城市/州与我的
Post
记录相关联?
谢谢。
解决方案1:
simple_form的文档用于country_select 1.x. 要使用文档中的simple_form,请在gemfile中限制country_select的版本:
gem 'country_select', '~> 1.0'
然后bundle update country_select
以降级。
解决方案2:
如果您想使用country_select 2.x,您将使用国家/地区代码,而不是国家/地区名称。 您的表单助手与simple_form文档略有不同:
<%= f.input :country_code, as: :country, priority: ['BR'] %>
无论哪种解决方案
您需要在Post模型中添加一列,以存储用户在数据库中选择的国家/地区。 数据类型将是字符串/ varchar。 您可以使用以下内容生成迁移:
rails generate migration AddCountryCodeToPost country_code:string
country_select只知道国家。
不是城市或州。
如果您希望用户提供州或城市,您可以让他们填写文本字段并存储他们提供的任何字符串(您可以将这些列添加到您的模型中),或构建您自己的选择/自动完成系统。 有一个state_select gem,但您需要使用javascript或流水线表单手动将其与country_select集成。 我不知道有哪些gem按州/国家/地区提供城市名称的数据来源,但很可能有一些gem出现在那里。
注意
有关country_select 1.x和country_select 2.x之间差异的更多信息,请参阅升级指南 。