自定义表单验证Rails

时间:2014-09-23 12:49:12

标签: ruby-on-rails ruby if-statement activerecord ruby-on-rails-4

我想知道我是否错误地设置了我的方法,因为我的验证尝试在方法中途被忽略。 (我提供了一个基本的例子,我希望在添加更多内容之前使其工作)

我有一个表单的两个变体都属于同一个对象。表格由列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>

所以我的语法有错误?或者我在名称字段上调用了错误的验证?

由于

2 个答案:

答案 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