如何让country_select gem和simple_form从头开始工作?

时间:2014-11-04 13:53:44

标签: ruby-on-rails ruby-on-rails-4 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的模型?< / p>

当我这样做时:

<%= f.input :country, as: :country, collection: [ "Australia", "Brazil", "New Zealand"] %>

我收到no country method on Post错误。我必须将此添加到我的Post.rb

attr_accessor :country

如果我的记忆正确地为我服务,那么由于强参数,我不再需要在Rails 4中这样做了,对吗?

这有效,但现在collection:规范不起作用。我仍然看到很多国家名单。

请记住,我没有必要运行任何迁移来修改我的Post.rb模型。我不知道要添加哪些列。我是否将country, state, city添加到我的Post模型中,还是创建了一个名为Country的新模型?

关于gem中的国家/地区(国家代码,城市,州等)的所有信息都是通过Gem中的YAML文件加载的吗?

我没有任何线索,文档非常稀疏。

所以我的问题就是这些:

  1. 如何使此simple_form集合正常工作。
  2. 如何让国家/地区的其他属性显示在表单中(如州和/或城市)?
  3. 我是否必须在某个表格中提供其他数据?
  4. 如何关联国家/地区&amp;用户使用我的Post记录选择的城市/州?
  5. 感谢。

1 个答案:

答案 0 :(得分:3)

解决方案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集成。我不知道有哪些宝石按州/国家/地区提供城市名称的数据来源,但可能会有一些宝石。

注意

有关country_select 1.x和country_select 2.x之间差异的更多信息,请参阅upgrade guide