我很难在一些复杂的关联中验证两个对象。这是我所拥有的一个例子:
car.rb
class Car
has_many :passengers
end
passenger.rb
class Passenger
belongs_to :car
belongs_to :info
end
我需要做的验证:
Info
的对象有关联,该对象有"雇主"作为一个字符串。所有乘客必须拥有相同的雇主。界面有一个多选框可供乘客选择。一旦您选择了乘客,您点击"创建" (或"更新",它有自己的一系列问题)。
当控制器试图创建Car
时,它需要运行汽车验证,然后乘客验证需要通过(雇主检查),然后汽车需要确保它不是超过乘客数量。如果其中一个失败,我需要重置并将它们带回新页面。
在更新期间,如果失败,我需要将原来的乘客恢复到汽车。我不确定如何在不将对象实际保存到数据库的情况下执行验证。此外,一旦将对象保存到数据库中,如果验证失败,那么我就不知道如何恢复以前的乘客。
如何在将关联对象保存到数据库之前对其进行验证?
答案 0 :(得分:1)
您可以使用自定义验证custom_validations
validate :validate_passengers
def validate_passengers
errors.add(:passengers, "too much") if tags.size > 5 #your limit
end
这将验证乘客到车的限制