2016-07-12 62 views
2

我在驗證一些複雜關聯中的兩個對象時遇到困難。這裏是什麼,我有一個例子:如何處理關聯對象之間的驗證?

car.rb

class Car 
    has_many :passengers 
end 

passenger.rb

class Passenger 
    belongs_to :car 
    belongs_to :info 
end 

驗證我需要做的:

  • 數的乘客數量有限
  • 乘客擁有一個名爲Info的對象的關聯,該對象具有「僱主」作爲字符串。所有乘客必須擁有相同的僱主。

界面有一個多選框可以選擇乘客。一旦你選擇了乘客,你點擊「創建」(或「更新」,這是它自己的一套問題)。

當控制器嘗試創建Car時,它需要運行汽車驗證,然後需要通過乘客驗證(僱主檢查),然後汽車還需要確保它不超過乘客數。如果其中一個失敗,我需要重置並將它們帶回新頁面。

在更新期間,如果失敗,我需要將原來的乘客恢復到車上。我不確定如何執行驗證,但實際上並未將對象保存到數據庫。另外,一旦對象被保存到數據庫中,如果驗證失敗,那麼我不知道如何恢復以前的乘客。

如何在將相關對象保存到數據庫之前對其進行驗證?

回答

1

可以使用自定義的驗證custom_validations

validate :validate_passengers 

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

這將驗證乘客的限制汽車

+0

這爲我工作。我能夠使用自定義驗證,但我最終還是使用'accep_nested_attributes_for'和'allow_destroy'選項。 – ardavis

相關問題