2016-07-12 4 views
2

いくつかの複雑な関連付けで2つのオブジェクトの検証に問題があります。ここで私が持っているものの例です:関連付けられたオブジェクト間のバリデーションを処理する方法は?

  • 数:

    car.rb

    class Car 
        has_many :passengers 
    end 
    

    passenger.rbは私がする必要がある検証

    class Passenger 
        belongs_to :car 
        belongs_to :info 
    end 
    

    が制限されています

  • 乗客には、 "Employer"を文字列として持つInfoというオブジェクトへの関連があります。乗客はすべて同じ雇用主でなければなりません。

インターフェイスには、乗客を選択するための複数選択ボックスがあります。乗客の選択が完了したら、「作成」(または「更新」、それ自体の問題があります)をクリックします。

コントローラーがCarを作成しようとすると、車の検証を実行する必要があります。その後、乗客の検証が通過する必要があります(雇用者のチェック)。そして、乗客が乗客数を超えないようにする必要もあります。これらのいずれかが失敗した場合、リセットして新しいページに戻す必要があります。

更新中に失敗した場合、元の乗客を車に戻す必要があります。私はどのように実際にデータベースにオブジェクトを保存せずに検証を実行するか分からない。さらに、オブジェクトがデータベースに保存されると、検証が失敗した場合、以前の乗客の復元方法はわかりません。

関連付けられたオブジェクトをデータベースに保存する前に、どのように検証できますか?

答えて

1

あなたはcustom_validations

validate :validate_passengers 

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

カスタム検証を使用することができますこれは、これは私のために働いた車

+0

に乗客の制限を検証します。私はカスタム検証を使用することができましたが、 'allow_destroy'オプションと共に' accepts_nested_attributes_for'を使用することになりました。 – ardavis

関連する問題