验证模型字段:如果值等于哈希中的键

发布于 2024-12-05 15:06:00 字数 494 浏览 0 评论 0原文

在初始化程序中,我有一个巨大的 COUNTRY_CODES 哈希值,其格式为:

{ :us => "United States, :de => "Germany" }

在我的模型中,我想验证输入的值是否为:

  • 呈现
  • 我的国家/地区代码哈希值的键

我该如何解决这个问题?

我无法使用:

validates :country, :presence => true,
                    :inclusion => { :in => COUNTRY_CODES }

我尝试过自定义验证器,但是当值为 nil 时,例如当我尝试使用 value.to_sym 时,我会收到方法错误,导致我验证验证器并且它变得混乱。

试图找出最干燥、最有效的方法来做到这一点。

In an initializer I have a huge COUNTRY_CODES hash, with format:

{ :us => "United States, :de => "Germany" }

In my model I want to validate that the entered value is:

  • present
  • a key of my country code hash

How do I apporach this?

I can't use:

validates :country, :presence => true,
                    :inclusion => { :in => COUNTRY_CODES }

I've tried custom validators, but I get method errors when the value is nil, e.g. when I try to use value.to_sym, causing me to validate the validator and it becomes messy.

Trying to figure out the most DRY and efficient way of doing this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

独孤求败 2024-12-12 15:06:00

您需要将 COUNTRY_CODES 键(符号)收集为字符串并验证是否包含。所以使用:

validates :country, :presence => true,:inclusion => { :in => COUNTRY_CODES.keys.map(&:to_s) }

You need to collect COUNTRY_CODES keys(symbols) as strings and validate for the inclusion. So use:

validates :country, :presence => true,:inclusion => { :in => COUNTRY_CODES.keys.map(&:to_s) }
谁许谁一生繁华 2024-12-12 15:06:00

如果您只想检查哈希中的键,请尝试 COUNTRY_CODES.keys

Try COUNTRY_CODES.keys if you only want to check with the keys in the hash.

辞别 2024-12-12 15:06:00

这个怎么样?

validates :country, :presence => true,
                    :inclusion => { :in => COUNTRY_CODES.keys.map{|c| c.to_s}

Hows this?

validates :country, :presence => true,
                    :inclusion => { :in => COUNTRY_CODES.keys.map{|c| c.to_s}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文