2011-07-14 10 views
14

私は、ウェブサイトの上部に一連のバナーを管理するRailsアプリケーションを作成しています。それぞれは、エディタによって提供されるURL、またはドロップダウンリストから選択された特定の製品のいずれかにリンクする必要があります。Rails 3 - 2つのフィールドのうちの1つを検証することが完了しました

私は、保存時にフィールド(製品IDまたはURL)が提供されていることを確認する、他のチェックとの一貫性のために、モデルに何らかのバリデーションを行いたいと考えています。

これをチェックするにはvalidatesタイプの方法がありますか、代わりにこのチェックをコントローラのどこかに置く必要がありますか?

答えて

18

それはモデルではかなりストレート検証です:上記に

validate :check_consistency 

def check_consistency 
    if product_id.blank? and url.blank? 
    #one at least must be filled in, add a custom error message 
    return false 
    elsif !product_id.blank? and !url.blank? 
    #both can't be filled in, add custom error message 
    return false 
    else 
    return true 
    end 
end 
+0

おかげで必要とされていない場合 - これはもっとありますそれ以下では、あなたのelsifは正しくないですが。それは 'elsif(!product_id.blank?と!url.blank?)'でなければなりません。そうでなければ、自分自身のカスタムバリデーターを書く必要なくきれいに検証しています(私は恐れていました)。 – PaulC

+0

あなたは正しいです;) – apneadiving

+0

ここにどのようにエラーメッセージを追加しますか? – alestanis

6

同様の答えが、これは単なる排他的であるかとelse文が

validate :check_consistency 
def check consistency 
    errors.add(:base, 'message') if product_id.blank?^url.blank? 
end 
+1

これは受け入れられた回答のよりクリーンなバージョンであるだけでなく、特定のエラーメッセージを指定すると、単にfalseを返すよりも便利です –

関連する問題