我想知道我是否错误地设置了我的方法,因为我的验证尝试在方法中途被忽略。 (我提供了一个基本的例子,我希望在添加更多内容之前使其工作)
我有一个表单的两个变体都属于同一个对象。表格由列animal_type区分,您可以在我的方法中看到
class Animal < ActiveRecord::Base
before_save :animal_form_validation
private
def animal_form_validation
if self.animal_type == 'Dog'
ap('Im validating the dog Form')
if self.name.length <= 0
errors.add(:name, "Name cannot be blank")
end
elsif self.animal_type == 'Cat'
ap('Im validating the cat form')
if self.name.length <= 0
errors.add(:name, "Name cannot be blank")
end
end
end
end
我是在提交猫还是狗我在控制台中获得了正确的消息(使用了很棒的打印),因此该方法正在运行并且知道我提交的是哪个表单,但是对于下一个if语句,它被忽略。< / p>
所以我的语法有错误?或者我在名称字段上调用了错误的验证?
由于
答案 0 :(得分:1)
使用验证代替before_save
回调:
validate :animal_form_validation
此外,如果您在验证前检查相同的条件,则可以添加conditional validation。示例:validate :animal_form_validation, if: name.blank?
答案 1 :(得分:0)
您正在before_save
中调用这些验证,这是在验证记录并被认为有效之后。您需要将其作为验证运行:
validate :animal_form_validation