如何验证ActiveRecord模型上的非db属性?

时间:2015-06-23 14:07:21

标签: ruby-on-rails validation activerecord

我有以下课程:

@echo off
set Log=c:\temp\logfile.txt
usbdeview.exe /stext %Log%

resolution属性不存储在数据库中,而是实例的瞬态属性。

当它调用validate!时,无论包含什么规则,验证都会失败。没有它,验证根本不起作用。

如何正确验证?

2 个答案:

答案 0 :(得分:2)

您可以使用=~运算符来匹配字符串和正则表达式,使用此方法可以在setter方法中添加条件

def resolution=(res)
  if res =~ /\A\d+x{1}\d+\d/
    # do something
  else
    # errors.add(...)
  end
end

但是,因为您已经使用过attr_accessor,所以您不必明确定义getter和setter,attr_accessor的作用是定义getter和只有setter方法,你可以这样做

class Instance < ActiveRecord::Base
  attr_accessor :resolution
  validates_format_of :resolution, with: /\A\d+x{1}\d+\d/
end

上述解决方案将完美运作!

希望这有帮助!

答案 1 :(得分:1)

设置变量后应调用validate!方法。在给定示例中,当值仍为零时,您将调用validate!