【问题标题】:Rails: get values from length validator for a field in templateRails:从长度验证器获取模板中字段的值
【发布时间】:2017-11-10 10:25:15
【问题描述】:

我有一个模型,在某些字段上带有验证器。示例:

class Notation < ActiveRecord::Base
  validates :name, presence: true, uniqueness: true
  validates_length_of :name, minimum: 5, maximum: 128
end

有没有办法从模板中的 :name 字段的最小值和最大值中获取这些值(因为我想在那里向用户显示最小和最大长度的值,并且想要动态地执行此操作,使用反映模型值的模板)? 在 Rails 控制台中,我可以执行类似的操作

Notation.validators_on(:name)

哪个输出

#<ActiveRecord::Validations::PresenceValidator:0x00000005428420 @attributes=[:name], @options={}>, #<ActiveRecord::Validations::UniquenessValidator:0x0000000541b8d8 @attributes=[:name], @options={:case_sensitive=>true}, @klass=Notation (call 'Notation.connection' to establish a connection)>, #<ActiveModel::Validations::LengthValidator:0x0000000540baf0 @attributes=[:name], @options={:minimum=>5, :maximum=>128}>

如果我使用数组的索引

Notation.validators_on(:name)[2]

我有:

#<ActiveModel::Validations::LengthValidator:0x0000000540baf0 @attributes=[:name], @options={:minimum=>5, :maximum=>128}>

但我想知道是否有另一种方法,也许通过我正在“查询”的验证类型,因为我不能依赖数组的顺序。

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

要获取验证器,可以过滤:

options = Notation.validators_on(:name)
  .select { |v| v.is_a? LengthValidator }
  .first.options

那么你就可以得到options[:maximum]等。

如果没有这样的验证器,您可能必须从代码中rescue,否则first 将失败。

【讨论】:

    猜你喜欢
    • 2020-02-23
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 2020-04-28
    • 2013-08-31
    相关资源
    最近更新 更多