基于rails的操作的多个验证

时间:2011-04-15 03:46:42

标签: ruby-on-rails validation

如何根据行动进行不同的验证?

validates :total_pressed,
          :numericality => { :on => :create, :greater_than => 0 },
          :numericality => { :on => :update, :greater_than_or_equal_to => 100 }

忽略第一个数字语句

3 个答案:

答案 0 :(得分:1)

您可以使用validate_on_create和validate_on_update

def validate_on_create # is only run the first time a new object is saved
  errors.add(:total_pressed, 'invalid number') if total_pressed < 0
end

def validate_on_update
  errors.add(:total_pressed, 'invalid number') if total_pressed < 100
end

答案 1 :(得分:0)

通常,验证在创建和更新(通过保存)上运行,因此如果传递on标志,则将其限制为两种方法中的任何一种。如果您希望根据操作进行不同的验证,那么最好使用自定义验证。

validate :total_pressed_on_create, :total_pressed_on_update

def total_pressed_on_create
  errors.add(:total_pressed, 'invalid number') if self < 0 and self.new_record?
end

def total_pressed_on_update
  errors.add(:total_pressed, 'invalid number') if self < 100 and !self.new_record?
end

这些方面的东西。查看Rails Guide: Validation了解详情。

答案 2 :(得分:0)

在你验证时,第一个数字语句被忽略,因为它是哈希,一个东西重写另一个

你可以这样做:

validates :total_pressed, :numericality => { :on => :create, :greater_than => 0 }
validates :total_pressed, :numericality => { :on => :update, :greater_than_or_equal_to => 100 }