从模型中获取验证

发布于 2024-09-29 17:19:32 字数 273 浏览 3 评论 0原文

我如何获取模型中定义的验证列表

示例:

class ModelName
  validates_presence_of :field_name
  validates_inclusion_of :sex, :in => %w(M F)
end

我需要哈希,如下所示:

{:field_name => 'required', :sex => 'Must be in: M, F'}

How cat I get list of validations defined in model

Example:

class ModelName
  validates_presence_of :field_name
  validates_inclusion_of :sex, :in => %w(M F)
end

I need Hash like:

{:field_name => 'required', :sex => 'Must be in: M, F'}

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

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

发布评论

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

评论(5

过气美图社 2024-10-06 17:19:32

您不需要插件来满足基本需求。

您可以执行此操作来获取所有验证器的哈希值。

ModelName.validators

如果您想获取特定字段的验证器:

ModelName.validators_on(:attribute)

You don't need a plugin for basic needs.

You can do this to get a hash of all validators.

ModelName.validators

If you want to get the validators for a specific field :

ModelName.validators_on(:attribute)
霞映澄塘 2024-10-06 17:19:32

此代码生成一组必填字段。它应该适合您的需求。

@required_fields = []
ModelName.validators.each do |v|
  @required_fields << v.attributes.first if v.kind == :presence
end

This code yields an array of required fields. It should be adaptable to your needs.

@required_fields = []
ModelName.validators.each do |v|
  @required_fields << v.attributes.first if v.kind == :presence
end
夜还是长夜 2024-10-06 17:19:32

如果您在模型中动态添加验证,则可以使用实例列出验证:

product = Product.new
product.singleton_class.validators_on(:price)
#=> [#<ActiveModel::Validations::PresenceValidaton>]

在 Rails 5.2 中测试。

If you add validations dynamically in your models, you can use the instance to list the validations:

product = Product.new
product.singleton_class.validators_on(:price)
#=> [#<ActiveModel::Validations::PresenceValidaton>]

Tested in Rails 5.2.

神仙妹妹 2024-10-06 17:19:32

看起来没有本地方法可以做到这一点,但是快速谷歌(“rails 反映验证”)会出现这个插件< /a>.

Looks like there's no native way to do it, but a quick Google (for "rails reflect validations") turns up this plugin.

征棹 2024-10-06 17:19:32

此代码对我有用:

ModelName.validators_on(:sex).first.options[:in]

answer: ["M","F"]< /strong>

您想要这样的内容:

field = :sex
sexs = ModelName.validators_on(field).first.options[:in]
hsh = {}
hsh[:field_name] = (ModelName.validators.grep(ActiveRecord::Validations::PresenceValidator).flat_map(&:attributes).include?(field)) ? 'required': 'optional'
hsh[field] ="Must be in: #{sexs.to_sentence(two_words_connector: ', ')}"

回答 hsh: {:field_name=>"required", :sex=>"必须位于:M、F"}

我使用Rails 6.1.4.1

This code work for me:

ModelName.validators_on(:sex).first.options[:in]

answer: ["M","F"]

You want something like this:

field = :sex
sexs = ModelName.validators_on(field).first.options[:in]
hsh = {}
hsh[:field_name] = (ModelName.validators.grep(ActiveRecord::Validations::PresenceValidator).flat_map(&:attributes).include?(field)) ? 'required': 'optional'
hsh[field] ="Must be in: #{sexs.to_sentence(two_words_connector: ', ')}"

answer hsh: {:field_name=>"required", :sex=>"Must be in: M, F"}

I use Rails 6.1.4.1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文