Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Rails中获得ApplicationRecord模型的验证约束?_Ruby On Rails_Ruby_Rails Activerecord - Fatal编程技术网

Ruby on rails 如何在Rails中获得ApplicationRecord模型的验证约束?

Ruby on rails 如何在Rails中获得ApplicationRecord模型的验证约束?,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,我有一个类,看起来像: class Account < ApplicationRecord validates :field, presence: true, inclusion:{ in: %w[foo bar baz bla] } end 是否存在类似的情况?如果是在enum中,它可能很简单,但在这种情况下,我找不到实现它的方法。如果您确实希望以有趣的方式实

我有一个类,看起来像:

class Account < ApplicationRecord
  validates :field, presence: true,
                    inclusion:{
                      in: %w[foo bar baz bla]
                    }
end

是否存在类似的情况?如果是在
enum
中,它可能很简单,但在这种情况下,我找不到实现它的方法。

如果您确实希望以有趣的方式实现这一点:

Account.validators_on(:field).detect { |validator| validator.is_a? ActiveModel::Validations::InclusionValidator }.options[:in]
这将返回一个字段数组

否则,虽然这不是您所寻找的黑魔法,但我会调整以下内容,使其更美观、更灵活:

class Account < ApplicationRecord
  FIELD_OPTIONS = %w[foo bar baz bla].freeze

  validates :field, presence: true,
                    inclusion:{
                      in: FIELD_OPTIONS
                    }
类帐户
然后,您可以通过
帐户::字段\选项
轻松访问


有什么用?如果您有任何问题,请告诉我它们是否合适。

第二个答案非常完美。你是怎么做到的?我这样问是因为感觉我在搜索引擎上搜索错误的关键词。我总是惊讶于Rails的直观性,查看我的原始帖子,答案似乎非常相似。使用
ls-G
:)对
pry
进行了一点挖掘,这是查看其中内容的好方法。还有一个用例可供测试,这很有帮助。很高兴这是有用的-如果你有任何其他问题,大声喊。
class Account < ApplicationRecord
  FIELD_OPTIONS = %w[foo bar baz bla].freeze

  validates :field, presence: true,
                    inclusion:{
                      in: FIELD_OPTIONS
                    }