【问题标题】:How to restrict country names in the `country_select` plugin?如何在“country_select”插件中限制国家名称?
【发布时间】:2011-03-06 07:05:49
【问题描述】:

我正在使用simple_form,它在使用名为country 的字段时会自动使用country_select 插件,如下所示:

<%= f.input :country %>

但我希望能够限制显示的国家/地区。

我看到country_select code defines this

COUNTRIES = ["Afghanistan"
  ...
"Yemen", "Zambia", "Zimbabwe"] unless const_defined?("COUNTRIES")

所以,我虽然可以像下面这样覆盖 COUNTRIES:

<% COUNTRIES = ["Canada","USA"] %>
<p><%= f.input :country %></p>

但我得到一个错误:

compile error
/home/jack/src/beta/app/views/contacts/_address_fields.html.erb:6: dynamic constant assignment
');  COUNTRIES = ["Canada","USA"] 
      ^

如何覆盖 COUNTRIES 常量?还是有更优雅的方式来做到这一点?

Ps.我正在使用 Ruby 1.8.7p330 和 Rails 3.0.3

【问题讨论】:

  • 我猜这是在 Rails 应用程序的开头加载的。您是否尝试在初始化程序中设置 COUNTRIES?
  • 仅供参考,我一般用github.com/jim/carmen

标签: ruby-on-rails ruby-on-rails-3 simple-form


【解决方案1】:

COUNTRIES 常量在您的视图执行时已经由插件定义。在初始化程序中定义您的 COUNTRIES。 (见:config/initializers

编辑: 把它放在一个初始化器中,比如config/initializers/countries.rb:

ActionView::Helpers::FormOptionsHelper::COUNTRIES = ["X", "Y", "Z"]

【讨论】:

  • 我按照建议做了,但整个列表仍在显示!
  • 查看我的编辑,并注意apneadiving的提醒重启你的服务器。
  • 问题是我没有使用命名空间设置常量。谢谢!
  • 将常量放入初始化程序中有效,但在服务器启动期间我收到警告:warning: already initialized constant COUNTRIES
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多