Rails:以编程方式获取验证范围

Pau*_*aul 2 validation ruby-on-rails range

我在模型中设置了验证:

validates_inclusion_of :height, :in => 36..96, :allow_nil => true, :message => 'must be between 3 and 8 feet'
Run Code Online (Sandbox Code Playgroud)

现在我想在JQ验证中设置相同的验证范围.我可以在JavaScript文件中重复相同的值,但更好的方法是以编程方式获取验证范围并通过视图输出.

如果可能的话,如何在Rails中以编程方式获取验证范围?

tyb*_*103 5

您可以访问模型的验证,如下所示:

Model.validators
Run Code Online (Sandbox Code Playgroud)

要获得这些特定值,请执行以下操作:

Model.validators_on(:height).select {|v| v.class == ActiveModel::Validations::InclusionValidator}.first.options[:in]
Run Code Online (Sandbox Code Playgroud)

将返回您的范围:

36..96
Run Code Online (Sandbox Code Playgroud)

您可以使用Range#minRange#max获取整数值.

为方便起见,制作一些类似的方法:

class Model < ActiveRecord::Base
  validates_inclusion_of :height, :in => 36..96, :allow_nil => true, :message => 'must be between 3 and 8 feet'

  def self.min_height
    validators_on(:height).select {|v| v.class == ActiveModel::Validations::InclusionValidator}.first.options[:in].min
  end
end
Run Code Online (Sandbox Code Playgroud)