验证Rails 3.1模型中的数据

时间:2012-02-08 18:31:01

标签: ruby-on-rails model

我的应用程序使用两个varariable来记录产品保修开始时间和保修结束时间;因此在我看来,我使用两个下拉菜单来选择开始和结束时间。 现在,我必须确保开始时间不应超过结束时间。以女巫的方式我可以模拟这个限制吗?我在模型文件中尝试使用以下代码:

  validates_numericality_of :warranty_end, :greater_than => :warranty_start 

但我看到它不起作用! 有什么建议吗?

3 个答案:

答案 0 :(得分:0)

我认为您不能像validates这样使用变量,但您可以创建这样的自定义验证器

validates_numericality_of :warranty_end
validate :warranty_end_less_than_warranty_start

...

def warranty_end_less_than_warranty_start
  unless warranty_end > warranty_start
    errors.add :warranty_end, "must be before the warranty starting date"
  end
end

答案 1 :(得分:0)

这应该有效(至少在3.2中)。来自http://api.rubyonrails.org/classes/ActiveModel/Validations/HelperMethods.html的文档:

validates_numericality_of :width, :less_than => Proc.new { |person| person.height } 
validates_numericality_of :width, :greater_than => :minimum_weight

答案 2 :(得分:0)

谢谢Azolo现在它的作品!唯一的一点是你删除了“validates_numericality_of:warranty_end”语句,所以我的工作代码是:

validate :warranty_end_less_than_warranty_start

...

def warranty_end_less_than_warranty_start
  unless warranty_end > warranty_start
    errors.add :warranty_end, "must be before the warranty starting date"
  end
end

再次感谢大家