如何处理关联对象之间的验证?

时间:2016-07-12 13:38:33

标签: ruby-on-rails validation

我很难在一些复杂的关联中验证两个对象。这是我所拥有的一个例子:

car.rb

class Car
  has_many :passengers
end

passenger.rb

class Passenger
  belongs_to :car
  belongs_to :info
end

我需要做的验证:

  • 乘客人数有限
  • 乘客与名为Info的对象有关联,该对象有"雇主"作为一个字符串。所有乘客必须拥有相同的雇主。

界面有一个多选框可供乘客选择。一旦您选择了乘客,您点击"创建" (或"更新",它有自己的一系列问题)。

当控制器试图创建Car时,它需要运行汽车验证,然后乘客验​​证需要通过(雇主检查),然后汽车需要确保它不是超过乘客数量。如果其中一个失败,我需要重置并将它们带回新页面。

在更新期间,如果失败,我需要将原来的乘客恢复到汽车。我不确定如何在不将对象实际保存到数据库的情况下执行验证。此外,一旦将对象保存到数据库中,如果验证失败,那么我就不知道如何恢复以前的乘客。

如何在将关联对象保存到数据库之前对其进行验证?

1 个答案:

答案 0 :(得分:1)

您可以使用自定义验证custom_validations

 validate :validate_passengers

  def validate_passengers
    errors.add(:passengers, "too much") if tags.size > 5 #your limit
  end

这将验证乘客到车的限制