2015-06-14 34 views
3

我有一个rails项目,使用活动记录,并想知道是否有最大数量的单个条目验证助手。例如,如果您有表单提交并且只想要,请说2,而您只希望前两个表单被坚持到桌面上,那么您将如何执行此操作?Rails验证 - 最大数据库条目

我已阅读手册,看​​看数字等,但它不是我真正想要的。我试图写我自己的验证方法的模型,但我假设有一个验证帮助,使这个简单:

def validatePassengerNumber 
    if self.passengers.length > 2 
     # unsure on how to refuse new data access to database 
    end 
    end 

回答

1

在检查返回true后向base添加一个错误,它将禁止保存到数据库中。

def validate_passenger_number   
    self.errors.add(:base, "exceed maximum entry") if self.passengers.length > 2 
end 

在相应的模型中调用此自定义验证。

  validate :validate_passenger_number, on: :create 
+0

Rails总是使用** Snake Style **来命名方法,如'validate_passenger_number',而不是'validatePassengerNumber'! –

+1

是的,它应该作为惯例,只是复制形式的问题,谢谢:) –

+0

感谢您的回应。我把这段代码到模型,但它仍然保存到数据库: 验证:validate_passenger_number上:创建 高清validate_passenger_number self.errors.add:如果self.passengers(基地“超过最大条目”) .length> 2 end – user3927582

1

有没有内置的验证;至少我还没有遇到任何。但以下是强制进行此类验证的一种方式:

def max_passengers 
    if self.passengers.count > 2 
     errors.add_to_base("There should not be more than 2 passengers.") 
    end 
    end 

然后,您可以使用此验证对乘客人数进行检查。

1

您可以添加回调并验证记录。

before_validation :validate_passanger_number 

private 

def validate_passanger_number 
    errors.add("Sorry", "you have added maximum passengers.") if self.passengers.count > 2 
end