は、私は次のユーザーモデルとレールのアプリを持っている属性Truck
モデルprimary_crew_member_id
とsecondary_crew_member_id
が常に存在することを確認するために、Truck
にはユーザー/クルーが存在できないという検証が行われています。私は何をすることができるようにしたいことは以下の通りですRailsのカスタム検証は
:
- 私がする必要があることが検証に拡大
- プライマリまたはセカンダリの乗組員(ユーザー)が他のトラックに割り当てられていないことを検証しますトラックAのJohn Doeがプライマリクルーのメンバーであるかどうかを確認してください。他のトラックのプライマリスロットまたはセカンダリスロットに割り当てることはできません。
- さらにジョン・ドウが与えられたトラック(デュアルrostering)上のプライマリとセカンダリスロットの両方を取ることができないはず拡大
私はGoogleで検索してきたなど主要スロットを検証し、検証が出ていますそう:
検証:primary_multiple_assignment
def primary_multiple_assignment
if Truck.has_primary(primary_crew_member_id)
errors.add(:base, "User has already been assigned to another truck.")
end
end
def self.has_primary(primary_crew_member_id)
primary = Truck.where(primary_crew_member_id: primary_crew_member_id).first
!primary.nil?
end
これが動作しているようですし、私は、ユーザーが単一のもの以外の任意のトラックに主スロットに割り当てられていないことを確認することができます。しかし、私は上記のように私の検証要件を満たすことができる必要があります。だから、基本的に私は1つの方法で複数の列を検証しようとしていますが、どのように動作するのか分かりません。
私はRailsのカスタム検証ガイドを読んだことがあります。あなたが助けなければならないかもしれないどんな情報も非常に高く評価されます。その間、私は解決策を見つけるためにつまずくとグーグルを続けます。
おかげで、私はその後、私は考えていなかった、いくつかの異なるエッジケースを処理するので、私の独自のソリューションを作ってみました。すぐに私の答えを投稿します。 – nulltek