2017-03-07 2 views
0

私は宝石のvalidates_operatorを試してみます。Validates_overlapカスタムメッセージ?

検証:arrival_dateを、:DEPARTURE_DATE、重複:{
スコープ: "place_id"、
message_title: "エラー"、
MESSAGE_CONTENT: "することは不可能を私はカスタムこの検証のための私のメッセージをする必要が 「}

をしかし、私は単純な形式のデフォルトのメッセージを持っている: 『この日のためにこの場所を予約するための

Thxを』以下の問題を確認してください将来の答え。

答えて

0

モデルの状態を確認し、無効なエラーコレクションにメッセージを追加するメソッドを作成することもできます。次に、検証メソッドの名前のシンボルを渡して、検証(API)クラスメソッドを使用してこれらのメソッドを登録する必要があります。

クラスメソッドごとに複数のシンボルを渡すことができ、それぞれの検証は登録された順序と同じ順序で実行されます。

有効な?この方法は、エラーコレクションが空であることが確認されますので、あなたが失敗する検証を希望する場合、カスタム検証メソッドがそれにエラーを追加する必要があります

class Invoice < ApplicationRecord 
    validate :expiration_date_cannot_be_in_the_past, 
    :discount_cannot_be_greater_than_total_value 

    def expiration_date_cannot_be_in_the_past 
    if expiration_date.present? && expiration_date < Date.today 
     errors.add(:expiration_date, "can't be in the past") 
    end 
    end 

    def discount_cannot_be_greater_than_total_value 
    if discount > total_value 
     errors.add(:discount, "can't be greater than total value") 
    end 
    end 
end 

デフォルトでは、そのような検証は、有効な呼び出すたびに実行されますか?またはオブジェクトを保存します。しかし、これらのカスタム検証をいつ実行するかは、:createまたは:updateのどちらかを指定してvalidateメソッドに:onオプションを指定することで制御することもできます。

class Invoice < ApplicationRecord 
    validate :active_customer, on: :create 

    def active_customer 
    errors.add(:customer_id, "is not active") unless customer.active? 
    end 
end 
関連する問題