在哪里以及如何对模型进行自定义验证?

3
假设我们有一个简单的模型,存储两个整数,最小值和最大值。我们希望强制 min <= max
class MinMax
  include MongoMapper::Document

  key :min, Integer
  key :max, Integer

  validate_presence_of :min, :max
end

1) 您如何验证min确实等于或小于max?

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

3个回答

2
validates :min_le_max

def min_le_max
  self.min <= self.max
end

哦,好的,谢谢!如果我需要向用户发送错误消息以告知出了什么问题,该怎么办? - randomguy
在方法内部,使用 errors.add :field_name, "error message"errors.add_to_base("error message") - PeterWong

2

我将倒序回答你的问题。对于第二个问题,像这样的验证绝对是模型的责任。几乎所有程序的核心逻辑都应该放在模型中;控制器仅负责从HTTP请求映射到相应的模型方法。

对于第一个问题,只需使用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

好的,谢谢兄弟!如果我需要向用户发送错误消息以告知出了什么问题,该怎么办?也就是说,你如何将错误消息插入到这个程序中? - randomguy

1
类级别的方法是validate,而不是validates...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接