在模型上进行自定义验证的位置和方式?

时间:2010-09-22 15:17:05

标签: ruby validation mongodb mongomapper

假设我们有一个简单的模型存储两个整数,分钟和最大值。我们想强制min <= max

class MinMax
  include MongoMapper::Document

  key :min, Integer
  key :max, Integer

  validate_presence_of :min, :max
end

1)你如何确认min确实等于或小于max?

2)如果您认为这不是模型的责任,那么应该在哪里和谁进行验证?

3 个答案:

答案 0 :(得分:2)

validates :min_le_max

def min_le_max
  self.min <= self.max
end

答案 1 :(得分:2)

我会反过来回答你的问题。对于问题2,这样的验证绝对是模型的责任。几乎任何你的程序的核心逻辑属于你的模型;控制器仅用于从HTTP请求映射到适当的模型方法。

对于1,只需使用validates来调用自定义验证方法

validates :valid_range

def valid_range
  min <= max
end

如果您需要自定义错误消息,请在验证中明确添加错误消息:

validate :valid_range

def valid_range
  errors.add_to_base("Not a valid range") unless min <= max
end

答案 2 :(得分:1)

班级方法是validate,而不是validates ...