【问题标题】:How to handle validations between associated objects?如何处理关联对象之间的验证?
【发布时间】:2016-07-12 13:38:33
【问题描述】:

我在验证一些复杂关联中的两个对象时遇到了困难。这是我所拥有的示例:

car.rb

class Car
  has_many :passengers
end

passenger.rb

class Passenger
  belongs_to :car
  belongs_to :info
end

我需要做的验证:

  • 人数有限
  • 乘客与名为Info 的对象有关联,该对象具有“Employer”作为字符串。所有乘客必须有相同的雇主。

界面有一个多选框来选择乘客。选择完乘客后,单击“创建”(或“更新”,它有自己的一系列问题)。

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

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

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

【问题讨论】:

    标签: ruby-on-rails validation


    【解决方案1】:

    您可以使用自定义验证custom_validations

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

    这将验证乘车人数的限制

    【讨论】:

    • 这对我有用。我能够使用自定义验证,但我最终也使用了 accepts_nested_attributes_for 以及 allow_destroy 选项。
    猜你喜欢
    • 2023-03-23
    • 2011-09-10
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多