如何根据行动进行不同的验证?
validates :total_pressed,
:numericality => { :on => :create, :greater_than => 0 },
:numericality => { :on => :update, :greater_than_or_equal_to => 100 }
忽略第一个数字语句
答案 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 }